1 //链式队列 2 #include<stdio.h> 3 #include<stdlib.h> 4 typedef int Status; 5 typedef struct node { 6 char a; 7 struct node* next; 8 }NODE; 9 typedef struct QueueLink { 10 NODE *front; 11 NODE *rear; 12 int count; 13 14 }QueueLink; 15 QueueLink *test_QueueLink; 16 void initQueueLink()//初始化链式队列 17 { 18 test_QueueLink = (QueueLink*)malloc(sizeof(QueueLink)); 19 //test_QueueLink->front = (NODE*)malloc(sizeof(NODE)); 20 //test_QueueLink->rear = (NODE*)malloc(sizeof(NODE)); 21 //test_QueueLink->front->next = NULL; 22 //test_QueueLink->rear->next = NULL; 23 test_QueueLink->front = NULL; 24 test_QueueLink->rear = NULL; 25 test_QueueLink->count = 0; 26 } 27 Status EnQueueLink(char p)//链式队列入列 28 { 29 NODE* temp = (NODE*)malloc(sizeof(NODE));//给入队的节点分配内存 30 if (temp == NULL) 31 { 32 perror("分配内存失败:"); 33 return 0; 34 } 35 if (test_QueueLink->front == NULL) //如果是空栈 36 { 37 temp->next = NULL; 38 temp->a = p; 39 test_QueueLink->rear = temp; //建立连接 40 test_QueueLink->front = temp; 41 test_QueueLink->count++; 42 return 1; 43 } 44 temp->next = NULL; 45 temp->a = p; 46 test_QueueLink->rear->next = temp;//移动尾指针指向的地址的下一个地址为temp 47 test_QueueLink->rear = temp; //移动尾指针指向下一个地址 48 test_QueueLink->count++; 49 return 1; 50 } 51 Status DeQueueLink() //链式队列出列 52 { 53 char c; 54 NODE* temp; 55 if (test_QueueLink->front->next == NULL)//如果说是最后一个数 56 { 57 temp = test_QueueLink->front; 58 c = temp->a; 59 free(temp); 60 temp = NULL; 61 printf("%c已出队列", c); 62 test_QueueLink->front = NULL; 63 test_QueueLink->rear = NULL;//删除当前节点并把头指针和尾指针指向NULL 64 test_QueueLink->count--; 65 return 1; 66 } 67 if (test_QueueLink->rear == NULL)//如果队列的头和尾都是指向NULL 68 { 69 printf("链式队列已空\n"); 70 return 0; 71 } 72 c = test_QueueLink->front->next->a;//读取链式队列的头部的内容 73 temp = test_QueueLink->front->next; 74 test_QueueLink->front->next = test_QueueLink->front->next->next;//移动链式队列的头部 75 printf("%c已出队列", c); 76 free(temp); 77 temp = NULL; //释放移动前的链式队列的头部 78 test_QueueLink->count--;//减少链式队列的总数 79 } 80 int main() 81 { 82 initQueueLink(); 83 EnQueueLink('a'); 84 EnQueueLink('b'); 85 EnQueueLink('c'); 86 printf("栈的大小为%d\n", test_QueueLink->count); 87 DeQueueLink(); 88 DeQueueLink(); 89 DeQueueLink(); 90 printf("栈的大小为%d\n", test_QueueLink->count); 91 return 0; 92 }