/************************** 队列的链式存储结构 功能代码包含: 1)队列的链式存储结构的数据结构定义 2)初始化链式队列 3)往链式队列中插入元素--入队 4)删除链式队列中的元素--出队 注意:代码不进行debug,只实现基本功能 Author:tmw date:2018-3-9 **************************/ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define error -65530 /**队列的链式存储结构的数据结构定义**/ typedef struct LinkQueueNode { int data; struct LinkQueueNode *next; }LinkQueueNode,*LinkQueuePtr; typedef struct LinkQueue { LinkQueuePtr front; LinkQueuePtr rear; int len; }LinkQueue; /**初始化链式队列**/ bool initLinkQueue( LinkQueue *Q ) { Q = (LinkQueue*)malloc(sizeof(LinkQueue)); if( !Q ) return false; /**让队头等于队尾**/ Q->front = Q->rear = (LinkQueueNode*)malloc(sizeof(LinkQueueNode)); /**队尾的next指针指向null**/ Q->rear->next = NULL; /**队头的next指针指向队尾**/ Q->front->next = Q->rear; /**初始化队长为0**/ Q->len = 0; return true; } /**往链式队列中插入元素e--入队**/ bool EnQueue( LinkQueue *Q, int e ) { /**链式存储不用考虑队列是否满的问题**/ LinkQueuePtr p; p = (LinkQueuePtr)malloc(sizeof(LinkQueueNode)); if(!p) return false; p->data = e; p->next = Q->rear->next; //即p->next = NULL Q->rear->next = p; Q->len++; return true; } /**删除链式队列中的元素--出队,并返回出队元素**/ int DeQueue( LinkQueue *Q ) { /**出队前判断:队列不能为空**/ if( Q->front == Q->rear ) return error; LinkQueuePtr p; p = Q->front->next; int e = p->data; Q->front->next = p->next; if( p == Q->rear )//删除该元素后,队列就空了 Q->rear = Q->front; free(p); Q->len--; return e; }
梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙