- 链式存储队列的存储结构
typedef int datatype; typedef struct link_node{ datatype info; struct link_node *next; }node; typedef struct{ node *front, *rear; }queue; - 基本运算实现
具体函数queue *init(); //建立一个空的链式队列 int empty(queue qu); //判断链式队列是否为空 void display(queue *qu); //输出链式队列中各个结点的值 datatype read(queue qu); //取得链式队列的队首结点值 queue *insert(queue *qu, datatype x); //向链式队列中插入一个值为x的结点 queue *dele(queue *qu); //删除链式队列中的队首结点
#include "lnkqueue.h" #include <stdio.h> #include <stdlib.h> /************************************************************************/ /* 函数功能: 建立一个空的链式队列 */ /* 函数参数: 无*/ /* 函数返回值: 指向queue类型变量的指针 */ /* 文件名: lnkqueue.c ,函数名: init()*/ /************************************************************************/ queue *init() { queue *qu; qu=(queue*)malloc(sizeof(queue)); qu->front=NULL; qu->rear=NULL; return qu; } /************************************************************************/ /* 函数功能: 判断链式队列是否为空 */ /* 函数参数: queue类型变量qu*/ /* 函数返回值: int类型*/ /* 文件名: lnkqueue.c,函数名: empty()*/ /************************************************************************/ int empty(queue *qu) { return (qu->front?0:1); //队列空返回1,队列非空返回0 } /************************************************************************/ /* 函数功能: 输出链式队列中各个结点的值 */ /* 函数参数: 指向queue类型变量的指针qu*/ /* 函数返回值: 空*/ /* 文件名: lnkqueue.c ,函数名:diaplay() */ /************************************************************************/ void display(queue *qu) { node *p; p=qu->front; if (!p) { printf("\n链式队列为空!"); } while (p) { printf("%5d",p->info); p=p->next; } printf("\n"); } /************************************************************************/ /* 函数功能: 取得链式队列的队首结点值 */ /* 函数参数: queue类型变量qu*/ /* 函数返回值: datatype类型*/ /* 文件名: lnkqueue.c ,函数名: read()*/ /************************************************************************/ datatype read(queue *qu) { if (!qu->front) { printf("\n链式队列为空!"); exit(1); } return ((qu->front)->info); } /************************************************************************/ /* 函数功能: 向链式队列中插入一个值为x的结点 */ /* 函数参数: 指向queue类型变量的指针qu,datatype类型变量x*/ /* 函数返回值: 指向queue类型变量的指针*/ /* 文件名: lnkqueue.c,函数名:insert() */ /************************************************************************/ queue *insert(queue *qu, datatype x) { node *p; p=(node*)malloc(sizeof(node)); p->info=x; p->next=NULL; if (qu->front==NULL) { qu->front=p; qu->rear=p; } else { qu->rear->next=p; qu->rear=p; } return qu; } /************************************************************************/ /* 函数功能: 删除链式队列中的队首结点 */ /* 函数参数: 指向queue类型变量的指针qu */ /* 函数返回值: 指向queue类型变量指针 */ /* 文件名: lnkqueue.c ,函数名: dele()*/ /************************************************************************/ queue *dele(queue *qu) { node *q; if(!qu->front) { printf("\n链式队列为空,无法进行删除操作!"); return qu; } q= qu->front; qu->front=q->next; free(q); if (qu->front==NULL) { qu->rear=NULL; //队列最后一个结点被删除后,队列变为空 } return qu; } - main测试函数
#include <stdlib.h> #include <stdio.h> #include "lnkqueue.h" void main(void) { queue lnkqueue, *p_lnkqueue; p_lnkqueue = &lnkqueue; //初始化顺序栈 p_lnkqueue = init(); int choosecase = 0; int x; puts("进队请输入0,出队请输入1"); while((scanf("%d", &choosecase)) == 1) { switch (choosecase) { case 0: puts("输入进队元素x"); scanf("%d", &x); insert(p_lnkqueue, x); display(p_lnkqueue); break; case 1: printf("出队的元素为%d\n",read(p_lnkqueue)); dele(p_lnkqueue); display(p_lnkqueue); break; default: break; } puts("进队请输入0,出队请输入1"); } system("pause"); }
队列(三):链式存储队列
最新推荐文章于 2025-10-26 06:08:00 发布
本文介绍了链式存储队列的结构定义,并详细展示了包括建立、判断空队列、输出队列、读取队首元素、插入元素和删除队首元素等基本运算的实现。还提供了一个简单的测试主函数来演示这些操作。
887

被折叠的 条评论
为什么被折叠?



