1 /*队列的链式存储实现*/
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <time.h>
5
6 typedef int ElemType;
7 #define OK 1
8 #define ERROR 0
9 typedef int Status;
10
11 typedef struct QNode
12 {
13 ElemType data;
14 struct QNode *next;;
15 }QNode,*QueuePtr;
16 typedef struct
17 {
18 QueuePtr front, rear;
19 }LinkQueue;
20
21 Status InitQueue(LinkQueue *Q)
22 {
23 QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
24 p->next = NULL;
25 Q->front = p;
26 Q->rear = p;
27 return OK;
28 }
29 int QueueLength(LinkQueue Q)
30 {
31 int i = 0;
32 QueuePtr p = Q.front->next;
33 while (p != NULL)
34 {
35 p = p->next;
36 i++;
37 }
38 return i;
39 }
40 Status EnQueue(LinkQueue *Q, ElemType e)
41 {
42 QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
43 p->data = e;
44 p->next = NULL;
45 Q->rear->next = p;
46 Q->rear = p;
47
48 return OK;
49 }
50 Status DeQueue(LinkQueue *Q, ElemType *e)
51 {
52 if (Q->front ==Q->rear)
53 return ERROR;
54 QueuePtr s;
55 s = Q->front->next;
56 *e =s->data;
57 Q->front->next =s->next;
58 if (Q->rear == s)
59 Q->rear = Q->front;
60 free(s);
61 return OK;
62 }
63 void visit(ElemType n)
64 {
65 printf("%d ", n);
66 }
67
68 void ListTraverse(LinkQueue Q)
69 {
70 QueuePtr p = Q.front->next;
71 while (p != NULL)
72 {
73 visit(p->data);
74 p = p->next;
75 }
76 }
77 int main()
78 {
79 LinkQueue L;
80 Status i, j;
81 char opp = '-1';
82 ElemType e;
83 int pos = 1;
84 int k = 0;
85
86 i = InitQueue(&L);
87 printf("队列L初始化完毕,StackLength(L)=%d\n\n", QueueLength(L));
88
89 printf("\n1.遍历操作 \n2.插入操作 \n3.删除操作 \n0.退出 \n请选择你的操作:\n");
90
91 while (opp != '0') {
92 scanf_s("%c", &opp);
93 switch (opp) {
94 case '1':
95 ListTraverse(L);
96 printf("\n");
97 break;
98
99 case '2':
100 srand((unsigned)time(NULL));
101 for (j = 1; j <= 10; j++)
102 {
103 i = EnQueue(&L, rand() % 100);
104 }
105 printf("在队列中依次插入10个随机数后:");
106 ListTraverse(L);
107 printf("\n");
108 printf("创建完毕,QueueLength(L)=%d\n\n", QueueLength(L));
109 break;
110 case '3':
111 e = -1;
112 DeQueue(&L, &e);
113 printf("弹出队列投元素%d,现在链表为:\n", e);
114 ListTraverse(L);
115 printf("\n");
116 break;
117
118 case '0':
119 exit(0);
120 }
121 }
122 }