下午把队列的各种操作用链表实现了一下,建立,插入元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空,源代码调试已经通过,运行结果如下图所示:
#include "iostream"using namespace std;typedef struct student{ int data; struct student * next;}node;//定义结构体节点typedef struct linkqueue{ node * first; node * rear;}queue;//定义队列结构,首指针和尾指针/*******************************函数名:void initqueue(queue *HQ)功能:初始化 把队首和队尾指针置空********************************/void initqueue(queue *HQ){ HQ->first=HQ->rear=NULL;}/**************************************函数名:queue *insert(queue *HQ,int x)功能:向队列中添加一个新元素,在尾节点之后***************************************/queue *insert(queue *HQ,int x){ node * s; s=new node; s->data=x; s->next=NULL; if (HQ->rear==NULL) { HQ->first=s; HQ->rear=s; } else { HQ->rear->next=s; HQ->rear=s; } return HQ; }/******************************函数名:int delqueue(queue *HQ)功能:从队列中删除一个元素********************************/int delqueue(queue *HQ){ node *p; int temp; /*若链队为空则停止运行*/ if(HQ->first==NULL) { printf("队列为空,无法删除! "); exit(1); } temp=HQ->first->data; /*暂存队首元素以便返回*/ p=HQ->first; /*暂存队首指针以便回收队尾结点*/ HQ->first=p->next; /*使队首指针指向下一个结点*/ /*若删除后链队为空,则需同时使队尾指针为空*/ if(HQ->first==NULL) { HQ->rear=NULL; } free(p); /*回收原队首结点*/ return temp; /*返回被删除的队首元素值*/}/*******************************函数名:int readqueue(queue *HQ)功能:读取队首元素*********************************/int readqueue(queue *HQ){ /*若链队为空则停止运行*/ if(HQ->first==NULL) { cout<<"队列为空,无法删除! "; exit(1); } return HQ->first->data; /*返回队首元素*/}/*************************************************函数名:int emptyqueue(queue *HQ)功能:检查链队是否为空,若为空则返回1,否则返回0************************************************/int emptyqueue(queue *HQ){ /*判断队首或队尾任一个指针是否为空即可*/ if(HQ->first==NULL) { return 1; } else { return 0; }}/***********************************函数名:void clearqueue(queue *HQ)功能:清除链队中的所有元素************************************/void clearqueue(queue *HQ){ node *p=HQ->first; /*队首指针赋给p*/ /*依次删除队列中的每一个结点,最后使队首指针为空*/ while(p!=NULL) { HQ->first=HQ->first->next; free(p); p=HQ->first; } /*循环结束后队首指针已经为空*/ HQ->rear=NULL; /*置队尾指针为空*/ }/*******************************函数名:void readall(queue *HQ)功能:输出链队中的所有元素*********************************/void readall(queue *HQ){ node *p=HQ->first; while (p!=NULL) { cout<data< next; }}void main(){ queue q; int a[5]={1,2,3,4,5}; int i; initqueue(&q); for(i=0;i<5;i++) { insert(&q,a[i]); }//队列中插入数据 1,2,3,4,5 cout< <<"读取队列中全部的数据:\n"; readall(&q);//读取队列中全部数据 insert(&q,60);//插入一个数据 cout<<"读取的队首节点:"< <
运行结果: