链式队列的相关操作

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 typedef int ElemType;
 4 typedef struct LinkNode{
 5     ElemType data;
 6     struct LinkNode *next;
 7 }LinkNode;
 8 //先进先出
 9 typedef struct{
10     //链表头 链表尾
11     LinkNode *front,*rear;
12 }LinkQueue;
13 //链式队列的初始化 
14 void InitQueue(LinkQueue &Q)
15 {
16     //头和尾指向同一个结点
17     Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
18     Q.front->next=NULL;
19 }
20 //判断队列是否为空 
21 bool IsEmpty(LinkQueue Q)
22 {
23     if(Q.front==Q.rear) return true;
24     return false;
25 }
26 //入队 
27 void EnQueue(LinkQueue &Q,ElemType x)
28 {
29     //创建新结点,插入到链尾     
30     LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
31     s->data=x;
32     s->next=NULL;
33     Q.rear->next=s;
34     Q.rear=s;
35 }
36 //出队  头部删除法
37 bool DeQueue(LinkQueue &Q,ElemType &x)
38 {
39     //队列为空
40     if(Q.front==Q.rear) return false;
41     //头结点什么都没存,所以头结点的下一个节点才有数据
42     LinkNode *p=Q.front->next;
43     x=p->data;
44     //断链
45     Q.front->next=p->next;
46     //删除的是最后一个元素,则队列置为空 
47     if(Q.rear==p) Q.rear=Q.front; 
48     //释放删除节点的内存 
49     free(p);
50     return true;
51 }
52 //队列的链式存储,部删除法,尾部插入法
53 int main()
54 {
55     LinkQueue Q;
56     bool ret;
57     ElemType element;//存储出队元素
58     InitQueue(Q);
59     EnQueue(Q,3);
60     EnQueue(Q,4);
61     EnQueue(Q,5);
62     EnQueue(Q,6);
63     EnQueue(Q,7);
64     ret=DeQueue(Q,element);
65     if(ret) printf("出队成功,元素值为 %d\n",element);
66     else printf("出队失败\n");
67     system("pause");
68 }

 

posted @ 2020-03-21 15:09  wydxry  阅读(361)  评论(0编辑  收藏  举报
Live2D