队列(三):链式存储队列
来源:互联网 发布:成都正规java培训机构 编辑:程序博客网 时间:2024/04/30 19:38
- 链式存储队列的存储结构
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");}
0 0
- 队列(三):链式存储队列
- 队列小记三之链式存储
- 队列---链式存储
- 链式队列的存储....
- 队列的链式存储
- 队列的链式存储
- 队列的链式存储
- 队列链式存储
- 队列的链式存储
- 队列的链式存储
- 队列的链式存储
- 队列类 - 链式存储
- 队列链式存储实现
- 队列---链式存储
- 队列(链式存储)
- 队列的链式存储
- 链式存储队列
- 链式存储队列
- 无废话WCF入门教程二[WCF应用的通信过程]
- Spring 事务机制详解
- 第12周项目4-圆与点的关系
- javascript基础
- 无废话WCF入门教程三[WCF的宿主]
- 队列(三):链式存储队列
- myBatis的SQL注入问题
- 无废话WCF入门教程四[WCF的配置文件]
- C语言高级语法概述笔记
- Css浮动
- 无废话WCF入门教程五[WCF的通信模式]
- perl函数substr
- Activity的四种加载模式
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)