队列 (queue)是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出(fist in fist out,缩写为fifo)的特性。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。 假设队列为q=(a1,a2,…,an),那么a1就是队头元素,an则是队尾元素。队列中的元素是按照a1、a2、…、an的顺序进入的, 退出队列也必须按照同样的次序依次出队,也就是说,只有在a1、a2、…、an-1都离开队列之后,an才能退出队列。
链队列可以定义如下:
#define true 1#define fal 0typedef struct qnode{ qelemtype data; struct qnode *next;}qnode, *queueptr;typedef struct{ queueptr front; queueptr rear;}linkqueue;
status initqueue(linkqueue &q){ q.fr蓑笠翁ont = q.rear = (queueptr) malloc(sizeof(qnode)); if(!q.front) exit ( overflow); q.front ->next = null; return ok;}
status destroyqueue(linkqueue &q){ while(q.front) {q.rear = q.front->next;free (q.front);q.front = q.rear; } return ok;}
status enqueue (linkqueue &q, qelemtype e){ p= (queueptr) malloc(sizeof(qnode)); if (!p) exit ( overflow); p->data = e; p->next = null; q.rear -> next =p; q.rear = p; return ok;}
status dequeue (linkqueue &q, qelemtype &e){ if ( q.front == q.rear) return error; p=q.front->next; e=p->data; q.front->next =p->next; if (q.rear == p) q.rear = q.front; free(p); return ok;}
#include<iostream>using namespace std;#define ok 1#define fal 春节习俗0typedef int qelemtype;typedef int status;typedef struct qnode{ qelemtype data; struct qnode *next;}qnode,*queueptr;typedef struct{ queueptr font; queueptr near;}linkqueue;status initqueue(linkqueue &q){ q.font=(queueptr)malloc(sizeof(qnode)); if(!q.font) exit(fal); q.font->next=null; q.near=q.font; return ok;}status queueempty(linkqueue q){ if(q.font->next) return ok; return fal;}status enqueue(linkqueue &q,qelemtype e){ queueptr p=(queueptr)malloc(sizeof(qnode)); p->data=e; q.near->next = p; q.near = q.near->next; p->next = null; return ok;}status dequeue(linkqueue &q,qelemtype &e){ if(!q.font->next) return fal; queueptr p; p=q.font->next; e=p->data; q.font->next=p->next; if(q.near==p) q.near=q.font; //当是最后一个元素时,q.font=null,q.near=q.font free(p); return ok;}status clearqueue(linkqueue &q){ queueptr p; p=q.font->next; queueptr q; while(p) { q=p; p=p->next; q.font->next=p; free(q); } q.near=q.font; return ok;}v浮天水送无穷树 带雨云埋一半山oid menu(){ cout<<"初始化队列:1"<<endl; cout<<"入队:2"<<endl; cout<<"出队:3"<<endl; cout<<"清空队列:4"<<endl; cout<<"退出:5"<<endl;}int main(){ linkqueue q; while(true) { int n; menu(); scanf("%d",&n); int e=-1; switch(n) { ca 1: initqueue(q); continue; ca 2: printf("请输入一个元素"); scanf("%d",&e); enqueue(q,e); continue; ca 3: dequeue(q,e); printf("\n出队元素%d\n",e); continue; ca 4: clearqueue(q); printf("清空成功\n"); continue; default: break; } if(n==5)break; }}
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!
本文发布于:2023-04-04 08:39:16,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/2395b6fbf9a5074a0bd65d7833015473.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C语言数据结构之链队列的基本操作.doc
本文 PDF 下载地址:C语言数据结构之链队列的基本操作.pdf
留言与评论(共有 0 条评论) |