(2011.10.31)3_a4.cpp —— 对链队列结构的定义
2011-10-31 08:22
267 查看
源程序:(由于写得比较匆忙,注释写得不是很多,跟单链表的程序几乎是一样的原理)
运行结果:
// 3_a4.cpp —— 对链队列结构的定义 /* * -> 程序要求: * 1. 完成对链队列结构的定义,以及对链队列的各种基本运算的实现(每种基本运算用一个函数来实现)。 * 2. 基本运算包括:初始化Init_lkqueue运算、判队空Empty_lkqueue运算、入队En_lkqueue运算、出队De_lkqueue运算、取队头元素Gethead_lkqueue运算。 * 3. 并且在main函数中分别调用以上各种基本运算的函数来使用,以验证其功能已实现。 * 4. 此题的源程序保存为 3_a4.cpp。 **/ /* * -> 程序分析: * 1. 写链队列的定义,感觉就是带头结点的单链表的一个特例。 * 2. 入队,可以看作是单链表中的append操作。 * 3. 出队,是头结点后的第一个结点的删除。 * 4. 直接按单链表的方法写这个队列出来吧。 **/ #include <iostream> #include <cstdlib> using std::cout; using std::endl; template <typename elem> class lkqueue; template <typename elem> class lkqueuenode { friend class lkqueue<elem>; private: elem data; lkqueuenode * next; public: lkqueuenode(elem d, lkqueuenode * n = NULL):data(d), next(n){} lkqueuenode(lkqueuenode *n = NULL):next(n){} }; template <typename elem> class lkqueue { private: lkqueuenode<elem> * head; lkqueuenode<elem> * tail; int size; public: lkqueue(){init();} ~lkqueue(){removeall();} // 构造,析构 void init(); void removeall(); // 判空 bool isempty(); // 入队,取队,出队 void enlkqueue(const elem & nelem); void getheadlkqueue(elem & gelem); void delkqueue(); }; template <typename elem> void lkqueue<elem>::init() { head = tail = new lkqueuenode<elem>; size = 0; return; } template <typename elem> void lkqueue<elem>::removeall() { while ( head != NULL) { tail = head -> next; delete head; head = tail; } return; } template <typename elem> bool lkqueue<elem>::isempty() { return size == 0; } template <typename elem> void lkqueue<elem>::enlkqueue( const elem & pelem) { tail -> next = new lkqueuenode<elem> (pelem, tail -> next); tail = tail -> next; size++; cout << "入队成功\n"; return; } template <typename elem> void lkqueue<elem>::getheadlkqueue(elem &gelem) { if (!isempty()) { gelem = head -> next -> data; cout << "\n赋值成功!\n"; return; } cout << "\n该队为空,赋值失败!\n;"; return; } template <typename elem> void lkqueue<elem>::delkqueue() { if (isempty()) { cout << "\n该队为空,删除失败!\n"; return; } lkqueuenode<elem> * temp = head -> next; head -> next = head -> next -> next; delete temp; cout << "\n出队成功。\n"; size--; return; } int main() { cout << "-> 现在开始链式队列程序的测试...\n"; lkqueue<int> test; cout << "-> 入队测试开始...\n"; for (int i = 1; i <= 10; ++i) { cout << "第 " << i << " 次: "; test.enlkqueue(i); cout << endl; } cout << "-> 取队头测试...\n"; int temp; test.getheadlkqueue(temp); cout << temp << "为所取值。"; cout << "-> 出队测试...\n"; for (int i = 1; i < 13; ++i) { cout << "第 " << i << " 次: "; test.delkqueue(); cout << endl; } cout << "-> OK,所有测试完成! "; system("pause"); return 0; }
运行结果:
-> 现在开始链式队列程序的测试... -> 入队测试开始... 第 1 次: 入队成功 第 2 次: 入队成功 第 3 次: 入队成功 第 4 次: 入队成功 第 5 次: 入队成功 第 6 次: 入队成功 第 7 次: 入队成功 第 8 次: 入队成功 第 9 次: 入队成功 第 10 次: 入队成功 -> 取队头测试... 赋值成功! 1为所取值。-> 出队测试... 第 1 次: 出队成功。 第 2 次: 出队成功。 第 3 次: 出队成功。 第 4 次: 出队成功。 第 5 次: 出队成功。 第 6 次: 出队成功。 第 7 次: 出队成功。 第 8 次: 出队成功。 第 9 次: 出队成功。 第 10 次: 出队成功。 第 11 次: 该队为空,删除失败! 第 12 次: 该队为空,删除失败! -> OK,所有测试完成! 请按任意键继续. . .
相关文章推荐
- 4、数据结构笔记之四栈和队列定义
- 数据结构与算法(4)---Java语言实现:队列的单链表定义
- 数据结构之队列11循环队列定义及实现
- bo2-4.cpp设立尾指针的单循环链表(存储结构由c2-2.h定义)的12个基本操作
- 二项队列(类结构及节点定义)
- 数据结构之队列定义及基本操作实现
- 队列的顺序结构和链式结构定义
- (1.2.2)栈、队列的的结构定义和基本操作
- bo2-9.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(2个)
- (2011.10.30)3_a3.cpp —— 循环队列结构的定义
- Java数据结构之有效队列定义与用法示例
- (2011.10.19)3_a1.cpp -- 顺序栈结构的定义
- bo3-4.c 用单链表的基本操作实现链队列(存储结构由c3-2.h定义)的基本操作(9个)
- 队列和栈的结构的定义
- c++ 自己创建的namespace,声明在h文件中,定义在cpp文件中,这种程序结构应该是合理的吧,欢迎不同见解的朋友来讨论。
- bo2-1.cpp 顺序表示的线性表(存储结构由c2-1.h定义)的基本操作(12个)
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构一:栈和队列
- 数据结构实现之队列
- Android 开发 数据结构理解 队列和栈 分析及实现