第三章 队列数据结构链队列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章 队列数据结构链队列相关的知识,希望对你有一定的参考价值。
最近越来越感觉到c语言指针的强大~~
#include<stdio.h> #include<stdlib.h> #define QElemType int #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef int Status; //------------单链表------------队列的链式存储结构 typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front,rear;//队头指针和队尾指针 }LinkQueue; //-----------------基本函数操作----------------- Status InitQueue(LinkQueue &Q,int n) { Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));//构造一个空队列 if(!Q.front) exit(OVERFLOW); Q.front->next = NULL; printf("请输入n个数\\n"); for(int i = 1; i <= n; i ++)//读入n个数,并依次加入队列 { QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); scanf("%d",&p->data); p->next = NULL; Q.rear->next = p; Q.rear = p; } return OK; } //销毁队列Q Status DestroyQueue(LinkQueue &Q) { while(Q.front) { Q.rear = Q.front->next ; free(Q.front); Q.front = Q.rear ; } return OK; } //插入元素e为Q 的新的队尾元素 Status EnQueue(LinkQueue &Q,QElemType &e) { QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW);//存储分配失败 p->data = e; p->next = NULL; Q.rear->next = p; Q.rear = p; return OK; } //若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR Status DeQueue(LinkQueue &Q,QElemType &e) { if(Q.front == Q.rear ) return ERROR; QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); p = Q.front->next ; e = p->data ; Q.front->next = p->next ; free(p); return OK; } void PrintQueue(LinkQueue *Q)//输出队列Q 中的元素 { QueuePtr p = Q->front->next ;//将队列的头元素指针地址赋值给p while(p!=NULL) { printf("%d ",p->data); p = p->next ; } printf("\\n"); } int main() { LinkQueue Q; int n; printf("请输入n\\n"); scanf("%d",&n);//读入n个数,加入队列 InitQueue(Q,n);//初始化队列 printf("初始化后的队列为:\\n"); PrintQueue(&Q);//输出队列中的元素 int e; printf("请输入一个整数e\\n"); scanf("%d",&e);//读入e EnQueue(Q,e);//插入元素e为Q的新的队尾元素 printf("将e插入队尾后,队列更新为\\n"); PrintQueue(&Q);//输出插入队尾后队列的值 DeQueue(Q,e);//删除Q的队头元素,用e返回其值 printf("删除队头元素后的队列为\\n"); PrintQueue(&Q);//输出删除队头后的队列 DestroyQueue(Q);//销毁队列,释放存储空间 return 0; }
以上是关于第三章 队列数据结构链队列的主要内容,如果未能解决你的问题,请参考以下文章