链表实现队列
不用判断是否满了
#include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int ElemType; typedef struct LinkNode{ ElemType data; LinkNode *next; }LinkNode; typedef struct LinkQueue{ LinkNode *f,*r; }LinkQueue; void InitQueue(LinkQueue &Q){ Q.f=Q.r=(LinkNode*)malloc(sizeof (LinkNode)); Q.f->next=NULL;//指向Null }//初始化队列 bool IsEmpty(LinkQueue Q){ if(Q.f==Q.r){ return true;Circular Queue } return false; } bool EnQueue(LinkQueue &Q,int num){ LinkNode *p=(LinkNode*)malloc(sizeof (LinkNode)); p->data=num; p->next=NULL; Q.r->next=p; Q.r=p; } bool DeQueue(LinkQueue &Q,ElemType &element){ if(IsEmpty(Q)){ return false; } LinkNode *p=Q.f->next; element=p->data; Q.f->next=p->next; if(Q.r==p){ Q.r=Q.f; } free(p); return true; } int main() { LinkQueue Q; InitQueue(Q);//初始化队列 EnQueue(Q,3); EnQueue(Q,4); EnQueue(Q,5); EnQueue(Q,6); EnQueue(Q,7); ElemType element; bool ret=DeQueue(Q,element); ret=DeQueue(Q,element); if(ret) { printf("Now element is %d\n",element); }else{ printf("出队失败\n"); } return 0; }
用数组实现循环队列
#include <stdio.h> #include <stdlib.h> #define MaxSize 5 typedef int ElemType; typedef struct { ElemType data[MaxSize];//循环队列实际只能存4个 int front,rear; }SqQueue; void InitQueue(SqQueue &Q){ Q.front=Q.rear=0; } bool isEmpty(SqQueue Q){ if(Q.front==Q.rear){ return true; } return false; } bool EnQueue(SqQueue &Q,int value) { if((Q.rear+1)%MaxSize==Q.front){ return false; } Q.data[Q.rear]=value; Q.rear=(Q.rear+1)%MaxSize; return true; } bool DeQueue(SqQueue &Q,ElemType &element){ if(Q.rear==Q.front){ return false; } element=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; return true; } int main() { SqQueue Q; bool ret;//存储返回值 ElemType element;//存储出队元素 InitQueue(Q); ret=isEmpty(Q); if(ret) { printf("is empty\n"); }else{ printf("not empty\n"); } EnQueue(Q,3); EnQueue(Q,4); EnQueue(Q,5); ret=EnQueue(Q,6); ret=EnQueue(Q,7); if(ret) { printf("get in success\n"); }else{ printf("get in fail\n"); } ret=DeQueue(Q,element); return 0; }