队列——链式存储
#include<stdio.h> #include<stdlib.h> typedef struct LinkNode{ //定义队列结点 int data; struct LinkNode *next; }LinkNode; typedef struct{ //定义队列 LinkNode *front,*rear; //定义头结点和尾结点 }LinkQueue; //初始化 void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode)); //建立头结点 Q.front->next=NULL; } //判队空 bool isEmpty(LinkQueue Q){ if(Q.front==Q.rear){ return true; }else{ return false; } } //入队 bool EnQueue(LinkQueue &Q,int x){ LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); //创建新结点 s->data=x; s->next=NULL; //将结点插入到队尾 Q.rear->next=s; Q.rear=s; //将尾指针指向最后一个结点 return true; } //出队 bool DeQueue(LinkQueue Q,int &x){ if(Q.front==Q.rear){ return false; } LinkNode *p=Q.front->next; //令p指向除头结点外的第一个结点 x=p->data; Q.front->next=p->next; if(Q.rear==p){ //若原队列中只有一个结点,删除后变空 Q.rear=Q.front; } free(p); return true; } int main(){ }