队列的实现-链表
声明:
#include "stdio.h" #include "stdlib.h" typedef int DataType; struct Node; typedef struct Node *PNode; struct Node { DataType info; PNode link; }; struct LinkQueue { PNode f; PNode r; }; typedef struct LinkQueue *PLinkQueue;
//创建一个空队 PLinkQueue createEmptyQueue_link(void) { PLinkQueue plqu; plqu=(PLinkQueue)malloc(sizeof(struct LinkQueue)); if (plqu!=NULL) { plqu->f=NULL; plqu->r=NULL; } else { printf("out of space! \n"); } return plqu; }
//判断链表表示的队列是不是空队列 int isEmptyQueue_link(PLinkQueue plqu) { return(plqu->f==NULL); }
//入队运算 void enQueue_link(PLinkQueue plqu,DataType x) { PNode p; p=(PNode)malloc(sizeof(struct Node)); if (p==NULL) { printf("out of space! \n"); } else { p->info=x; p->link=NULL; //插入前是空队列 if (plqu->f==NULL) { plqu->f=p; plqu->r=p; } else { //将新节点插入 plqu->r->link=p; //修改队尾指针 plqu->r=p; } } }
//出队 void deQueue_link(PLinkQueue plqu) { PNode p; if (plqu->f==NULL) { printf("Empty queue. \n"); } else { p=plqu->f; //修改队头指针 plqu->f=p->link; free(p); } }
//取队列头部结点的值 DataType frontQueue_link(PLinkQueue plqu) { if (plqu->f==NULL) { printf("Empty queue. \n"); } else { return (plqu->f->info); } }
测试:
int main(int argv,char *argm[]) { PLinkQueue plqu; plqu=createEmptyQueue_link(); enQueue_link(plqu,23); enQueue_link(plqu,33); enQueue_link(plqu,3); enQueue_link(plqu,5); enQueue_link(plqu,245); enQueue_link(plqu,54); printf("删除前头结点%d \n",plqu->f->info); printf("删除前尾结点%d \n",plqu->r->info); deQueue_link(plqu); printf("删除后头结点%d \n",plqu->f->info); printf("删除后尾结点%d \n",plqu->r->info); return 1; }
结果:

浙公网安备 33010602011771号