C++链式队列
2015-10-06 21:25
369 查看
LinkQueue:
//链式队列 #include<iostream> using namespace std; typedef int elemType; struct QNode { elemType data; QNode *next; }; struct LinkQueue { QNode *front; QNode *rear; }; //初始化 void InitQueue(LinkQueue *q) { q->front = q->rear = new QNode; q->front->next = NULL; } //插入元素e为队列新的队尾元素 void EnQueue(LinkQueue *q, elemType e) { QNode *p = new QNode; p->data = e; p->next = NULL; q->rear->next = p; q->rear = p; } //删除队友元素,并打印其值 void DeQueue(LinkQueue *q) { QNode *p = q->front->next; if(q->front==q->rear) cout<<"队列为空"<<endl; else { elemType x = p->data; cout<<"删除队头元素: "<<x<<endl; q->front->next = p->next; if(q->rear == p) q->rear = q->front; delete p; } } //遍历队列 void TraQueue(LinkQueue *q) { QNode *p = q->front->next; int i = 1; if(q->front==q->rear) cout<<"队列为空"<<endl; else { while(p!=q->rear) { cout << i <<":\t"<<p->data<<endl; p = p->next; i++; } cout << i <<":\t"<<q->rear->data<<endl; } } //清空队列 void ClearQueue(LinkQueue *q) { if(q->front==q->rear) cout<<"出错,队列已经为空"<<endl; else { q->rear->next = q->front; delete(q->front); q->front = q->rear; } } //求队列长度 int LengthQueue(LinkQueue *q) { QNode *p = q->front->next; int length = 0; if(q->front!=q->rear) { while(p) { length++; p = p->next; } } return length; } int main() { LinkQueue q; InitQueue(&q); for(int i=1;i<7;i++) EnQueue(&q,i); int length = LengthQueue(&q); cout <<"队列长度为: "<< length <<endl; TraQueue(&q); cout<<endl; DeQueue(&q); TraQueue(&q); cout<<endl; for(int i=0;i<5;i++) DeQueue(&q); TraQueue(&q); cout<<endl; return 0; }
相关文章推荐
- 最近公共祖先(LCA):并查集+深搜
- c++primer plus第十七章-cin输入、cout输出和文件I/O
- 字符串操作符
- Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
- C++primer学习:泛型算法(1)
- 经典C语言位域结构体内存对齐
- C++顺序循环队列
- C++之递归函数的参数传递问题
- C++类模板实例
- 鞍点
- c语言中的经典算法
- C++链式栈
- C++中引用(&)的用法和应用实例
- poco c++框架库应用:数据库的连接池 推荐
- 简单算术表达式C++实现
- leetcode笔记:Sudoku Solver
- 深度学习(七)caffe源码c++学习笔记
- 单链表的创建、增加、删除、清空操作
- Trie树:应用于统计和排序
- C++顺序栈