1.介绍链队列前先来看一下关于的知识点
上图介绍了队列的几种变化,空队列时对头队尾指针都指向头指针,插入一个元素x时,队尾指针指向x,头指针也指向x。
2.上代码
#include#include typedef struct LinkNode { int data; LinkNode* next; }*LinkNodePtr; typedef struct LinkQueue { LinkNodePtr front; LinkNodePtr rear; }*LinkQueuePtr; LinkQueuePtr initQueue() { LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue)); LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof( LinkNodePtr)); headerPtr->next = NULL; resultPtr->front = headerPtr; resultPtr->rear = headerPtr; return resultPtr; } void outputLinkQueue(LinkQueuePtr paraQueuePtr) { LinkNodePtr tempPtr = paraQueuePtr->front->next; while (tempPtr != NULL) { printf("%d ",tempPtr->data); tempPtr = tempPtr->next; } printf("rn"); } void enqueue(LinkQueuePtr paraQueuePtr,int paraElement) { LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof (struct LinkNode)); tempNodePtr->data = paraElement; tempNodePtr->next = NULL; paraQueuePtr->rear->next = tempNodePtr; paraQueuePtr->rear = tempNodePtr; } int dequeue(LinkQueuePtr paraQueuePtr) { int resultValue; LinkNodePtr tempNodePtr; if (paraQueuePtr->front == paraQueuePtr->rear) { printf("The queue is empty !n"); return -1; } tempNodePtr = paraQueuePtr->front->next; resultValue = tempNodePtr->data; paraQueuePtr->front->next = paraQueuePtr->front->next->next; if (paraQueuePtr->rear == tempNodePtr) { paraQueuePtr->rear = paraQueuePtr->front; } free(tempNodePtr); tempNodePtr = NULL; return resultValue; } void testLinkQueue() { LinkQueuePtr tempQueuePtr; tempQueuePtr = initQueue(); enqueue(tempQueuePtr,10); enqueue(tempQueuePtr,30); enqueue(tempQueuePtr,50); outputLinkQueue(tempQueuePtr); printf("dequeue gets %dn",dequeue(tempQueuePtr)); printf("dequeue gets %dn",dequeue(tempQueuePtr)); printf("dequeue gets %dn",dequeue(tempQueuePtr)); printf("dequeue gets %dn",dequeue(tempQueuePtr)); enqueue(tempQueuePtr,8); outputLinkQueue(tempQueuePtr); } int main() { testLinkQueue(); return 1; }
3.运行结果
10 30 50 dequeue gets 10 dequeue gets 30 dequeue gets 50 The queue is empty ! dequeue gets -1 8
请大佬们多多指正!!!



