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 }