链队列、循环队列的实现(初始化、出队、入队、取队头元素、判空)

来源:互联网 发布:linux改成英文 编辑:程序博客网 时间:2024/03/29 14:04
<1>链队列#include<stdio.h>#include<malloc.h>//结点的结构体定义typedef int DataType;typedef struct qnode{DataType data;struct qnode *next;}LQNode;//定义头指针和尾指针typedef struct{LQNode *front;LQNode *rear;}LQueue;//初始化链队列void QueueInitiate(LQueue *Q){Q->rear=NULL;Q->front=NULL;}//非空否int QueueNotEmpty(LQueue Q){if(Q.front == NULL)return 0;else return 1;}//入队列void QueueAppend(LQueue *Q,DataType x){LQNode *p;p=(LQNode *)malloc(sizeof(LQNode));p->data=x;p->next=NULL;if(Q->rear!=NULL) Q->rear->next=p;Q->rear=p;if(Q->front == NULL) Q->front=p;}//出队列int QueueDelete(LQueue *Q,DataType *d){LQNode *p;if(Q->front == NULL){printf("队列已空无数据元素出队列!\n");return 0;}else{*d=Q->front->data;p=Q->front;Q->front=Q->front->next;if(Q->front == NULL) Q->rear=NULL;free(p);return 1;}}//取队头数据元素int QueueGet(LQueue Q,DataType *d){if(Q.front == NULL){printf("队列已空无数据元素出队列!\n");return 0;}else{*d = Q.front->data;return 1;}}int main(){LQueue Q;int x;QueueInitiate(&Q);QueueAppend(&Q,10);QueueAppend(&Q,20);QueueAppend(&Q,30);QueueGet(Q,&x);printf("%d\n",x);QueueDelete(&Q,&x);printf("%d\n",x);QueueGet(Q,&x);printf("%d\n",x);return 0;}<2> 循环队列#include<stdio.h>#define MaxQueueSize 100//结构体定义typedef int DataType;typedef struct{DataType queue[MaxQueueSize];int rear;int front;int count;}SeqCQueue;//初始化void QueueInitiate(SeqCQueue *Q){Q->rear = 0;Q->front = 0;Q->count = 0;}//非空否int QueueNotEmpty(SeqCQueue Q){if(Q.front != 0)return 1;elsereturn 0;}//入队列int QueueAppend(SeqCQueue *Q,DataType x){if(Q->count > 0 && Q->rear == Q->front){printf("队列已满无法插入!\n");return 0;}else{Q->queue[Q->rear]=x;Q->rear = (Q->rear + 1) % MaxQueueSize;Q->count++;return 1;}}//出队列int QueueDelete(SeqCQueue *Q,DataType *d){if(Q->count == 0){printf("队列已空无数据元素出队列!\n");return 0;}else {*d = Q->queue[Q->front];Q->front = (Q->front+1)%MaxQueueSize;Q->count--;return 1;}}//取队头数据元素int QueueGet(SeqCQueue Q,DataType *d){if(Q.count == 0){printf("队列已空无数据元素可取\n");return 0;}else{*d = Q.queue[Q.front];return 1;}}int main(){SeqCQueue Q;int x;QueueInitiate(&Q);QueueAppend(&Q,10);QueueAppend(&Q,20);QueueAppend(&Q,30);QueueGet(Q,&x);printf("%d\n",x);QueueDelete(&Q,&x);printf("%d\n",x);QueueGet(Q,&x);printf("%d\n",x);return 0;}

2 0
原创粉丝点击