队列相关操作

来源:互联网 发布:linux locale c 编辑:程序博客网 时间:2024/05/18 04:43
#include<iostream>using namespace std ;typedef struct node{char data ;struct node *next ;}node , *QueueLink;typedef struct {QueueLink front ;QueueLink rear ;}Queue ;/*初始化*/void Init(Queue &q){q.front = q.rear = (QueueLink)malloc(sizeof(QueueLink));if(!q.front){cout<<"分配内存"<<endl;exit(1) ;}q.front ->next = NULL ;return ;}/*插入数据到duilie*/void Push(Queue &q , char e){QueueLink p ;p = (QueueLink)malloc(sizeof(QueueLink));if(!p){cout<<"分配内存失败"<<endl;exit(1) ;}p->data = e;p->next = NULL;q.rear ->next = p ;q.rear = p ;}void outprint(char e){cout<<e ;}/*遍历队列*/void TraQueue(Queue q){if(q.front == q.rear )return ;q.front = q.front->next ;while(q.front != q.rear ){outprint(q.front ->data);q.front  = q.front ->next ;}return ;}/*获取栈顶元素*/char GetFront(Queue q , char &e){if(q.front == q.rear )return e = '0' ;e = q.front ->next ->data ;return e ;}/*删除栈顶元素*/char Pop(Queue &q , char &e){if(q.front == q.rear ){cout<<"队列为空"<<endl;return e = '0';}QueueLink  p;p = q.front->next  ;e = p->data  ;q.front->next  = p ->next ;if(q.rear == p)q.rear = q.front ;/*为什么越界*///free(p);return e ;}int main(void){Queue q;Init(q);char e ;for( int i = 0 ; i < 10 ; i ++){e = 'A' + i ;Push(q,e);}cout<<"队列的遍历 : "<<endl;TraQueue(q);cout<<endl ;cout<<"栈顶元素为:";GetFront(q , e);cout<<e <<endl ;while(1){cout<<"删除栈顶元素:";Pop(q,e);cout<<e <<endl;if(e=='0')break;}return 0;}

原创粉丝点击