链队列基本操作
Posted 张晓楠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链队列基本操作相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include<Stdlib.h> typedef int elemtype; typedef struct QueueNode { elemtype data; struct QueueNode *next; }LinkedQueueNode; typedef struct LQueue { LinkedQueueNode *front; LinkedQueueNode *rear; }LQueue, * LinkedQueue; LinkedQueue Init_LinkedQueue(); int LinkedQueue_Empty(LinkedQueue Q); int Enter_LinkedQueue(LinkedQueue Q,elemtype x); int Delete_LinkedQueue(LinkedQueue Q,elemtype *x); int GetFront_LinkedQueue(LinkedQueue Q,elemtype *x); int Print_LinkedQueue(LinkedQueue Q); void menu() { system("cls"); printf("\t\t1-创建\n"); printf("\t\t2-入队\n");; printf("\t\t3-判断队列是否为空\n"); printf("\t\t4-出队\n"); printf("\t\t5-查看队头元素\n"); printf("\t\t6-输出\n"); printf("\t\t#-quit\n"); printf("Please select: "); } int main() { char cmd; int isdo; LinkedQueue Q; elemtype x; system("cls"); menu(); while((cmd=getchar())!=‘#‘) { switch(cmd) { case ‘1‘: Q=Init_LinkedQueue(); if(Q==NULL) { printf("申请链队列内存空间失败,程序结束"); return 0; } printf("\n创建成功!\n"); printf("\n\n\n\t\t\t"); break; case ‘2‘: printf("输入队列元素:\n"); scanf("%d",&x); while(x!=0) { isdo= Enter_LinkedQueue(Q,x); scanf("%d",&x); } if(isdo==1) { printf("入队成功"); } else { printf("入队失败"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case ‘3‘: isdo=LinkedQueue_Empty(Q); if(isdo==1) { printf("队列为空\n"); } else if(isdo==0) { printf("队列不为空\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case ‘4‘: isdo=Delete_LinkedQueue(Q,&x); if(isdo==1) { printf("出队成功,出队的元素为:%d\n",x); } else if(isdo==0) { printf("出队失败\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case ‘5‘: isdo=GetFront_LinkedQueue(Q,&x); if(isdo==1) { printf("队头元素为:%d\n",x); } else if(isdo==0) { printf("取队头元素失败\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case ‘6‘: isdo=Print_LinkedQueue(Q); printf("\n"); printf("\n\n\n\t\t\t"); break; } fflush(stdin); system("pause"); menu(); } return 0; } //初始化 LinkedQueue Init_LinkedQueue() { LinkedQueue Q=(LinkedQueue)malloc(sizeof(LQueue)); LinkedQueueNode *head=(LinkedQueueNode *)malloc(sizeof(LinkedQueueNode)); if(head!=NULL&&Q!=NULL) { head->next=NULL; Q->front=head; Q->rear=head; } return Q; } //判队列空 int LinkedQueue_Empty(LinkedQueue Q) { if(Q->front==Q->rear) { return 1; } else { return 0; } } //入队 int Enter_LinkedQueue(LinkedQueue Q,elemtype x) { LinkedQueueNode *node; node=(LinkedQueueNode *)malloc(sizeof(LinkedQueueNode)); if(node==NULL) { return 0; } node->data=x; node->next=NULL; Q->rear->next=node; //将新结点插入队尾 Q->rear=node; //设置尾指针指向新的队尾元素 return 1; } //出队 int Delete_LinkedQueue(LinkedQueue Q,elemtype *x) { LinkedQueueNode *node; if(Q->front==Q->rear) { return 0; } else { node=Q->front->next; *x=node->data; Q->front->next=node->next; if(node==Q->rear) { Q->rear=Q->front; } free(node); return 1; } } //取队列头数据元素 int GetFront_LinkedQueue(LinkedQueue Q,elemtype *x) { if(Q->front==Q->rear) { return 0; } else { *x=Q->front->next->data; return 1; } } //输出 int Print_LinkedQueue(LinkedQueue Q) { LinkedQueueNode *p; if(Q->front==Q->rear) { return 0; } p=Q->front->next; while(p->next!=0) { printf("%4d\n",p->data); p=p->next; } return 1; }
以上是关于链队列基本操作的主要内容,如果未能解决你的问题,请参考以下文章
数据结构 ---[链表 ] [使用链表实现栈 以及 队列 (Java代码实现)]