//队链 #include <stdio.h> #include <malloc.h> #include <stdbool.h> typedef struct LinkNode//定义队链结点 { int data; struct LinkNode *next; }LinkNode; typedef struct { LinkNode *front,*rear; }*LinkQueue; void initLinkQueue(LinkQueue *Q)//队链初始化 { (*Q)=(LinkQueue)malloc(sizeof(LinkQueue));//Q是一个指针,所以需要进行初始化,否则便是一个野指针,没有办法赋值 (*Q)->front = (*Q)->rear = (LinkNode *)malloc(sizeof(LinkNode));//让front和rear指向头结点 (*Q)->front->next = NULL; } bool isEmpty(LinkQueue Q)//判断队链是否为空 { if(Q->front == Q->rear) { return true; } else { return false; } } void EnLinkQueue(LinkQueue *Q,int e)//入队操作 { LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode)); p->data=e; p->next=NULL; (*Q)->rear->next=p; (*Q)->rear=p; } bool DeLinkQueue(LinkQueue *Q,int *e)//出队操作 { if(isEmpty(*Q)) { return false; } else { *e=(*Q)->front->next->data;//因为front指向的是头结点,所以删除的是front的next LinkNode *p; p=(*Q)->front->next;//因为front指向的是头结点,所以删除的是front的next (*Q)->front->next=p->next; if((*Q)->rear==p) { (*Q)->rear=(*Q)->front;//当队链中只有一个结点时,即rear指向的结点,则删除后让rear和front都指向头结点 } free(p); return true; } } int main() { LinkQueue Q; initLinkQueue(&Q); EnLinkQueue(&Q,666); EnLinkQueue(&Q,888); int *e; int a=0; e=&a; printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data); DeLinkQueue(&Q,e); printf("delete_value: %d",*e); printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data); return 0; }
标签:队链,01,data,LinkQueue,next,front,基本操作,LinkNode,rear From: https://www.cnblogs.com/ryuichi-ssk/p/17278635.html