链接队列的基本算法
来源:互联网 发布:lol训练软件 编辑:程序博客网 时间:2024/06/08 22:31
所谓链接队列就是用一个线性链表来表示一个队列,队列中每个元素对应链表中一个链接点,队头指针front指向线性链表的第1个链接点,队尾指针rear指向链表的最后一个链接点,与顺序存储结构的队列不同的是,队头指针和队尾指针都是指向实际队头元素和队尾元素所在的链接点。测试链接队列为空的条件是front为NULL,链接队列的类型定义如下:
/* 定义一个链接队列的类型 */typedef struct node { QElemType data; struct node *link;}QNode, *QLink;
链接队列的基本算法描述及测试代码描述如下:
#include<stdlib.h>#include<stdio.h>/* 定义一个链接队列的类型 */typedef struct node {int data;struct node *link;}QNode, *QLink;/* 初始化链接队列 */void initialQ( QLink *front, QLink *rear ){*front = *rear = NULL;}/* 测试链接队列是否为空 */int isEmpty( QLink front ){return front == NULL;}/* 取当前对头元素 */int getQ( QLink front, int *item ){if( isEmpty( front ) ) /* front指向队头元素所在的链接点 */return 0;*item = front->data; /* 保存对头元素的数据信息 */return 1;}/* 链接队列的插入 */int insertQ( QLink *front, QLink *rear, int item ){ /* *front, *rear 分别指向对头元素和队尾元素所在的链接点 */QLink p;p = ( QLink )malloc( sizeof( QNode ) ); /* 申请一个链接点,注意需要检查是否申请成功 */if( p == NULL )return 0; /* 插入失败,返回0 */p->data = item; /* 将item送入新结点的数据域 */p->link = NULL;if( *front == NULL ) /* 将item插入空队列的情况,需要注意这种情况 */*front = p;else(*rear)->link = p; /* 将新的链接点连接到队列的尾部 */*rear = p; /* 更新队列的队尾指针 */return 1; /* 插入成功,返回1 */}/* 链接队列的删除 */int deleteQ( QLink *front, int *item ){QLink p;if( *front == NULL ) /* 队列为空,删除元素失败,返回0 */return 0;p = *front;*front = p->link; /* 将front指向下一个元素 */*item = p->data; /* 保存队头元素的数据信息 */free( p ); /* 释放被删除头结点空间 */return 1;}/* 链接队列的销毁 */void destroyQ( QLink *front, QLink *rear ){while( *front != NULL ){*rear = (*front)->link;free( *front );*front = *rear;}}void printQ( QLink front ){while( front != NULL ){printf( "%d\n", front->data );front = front->link;}}int main(){QLink front, rear;initialQ( &front, &rear );printf( "the queue is empty: %d\n", isEmpty( front ) );insertQ( &front, &rear, 5 );insertQ( &front, &rear, 12 );insertQ( &front, &rear, 91 );printQ( front );int item;deleteQ( &front, &item );printf( "the deleted elem is %d\n", item );getQ( front, &item );printf( "current the front elem is %d\n", item );return 0;}
- 链接队列的基本算法
- 队列的一些基本算法
- 链接堆栈的基本算法
- 链接堆栈的基本算法
- js的栈和队列基本算法
- 环形队列各种基本运算的算法
- 线性表----队列(链接表示)的基本操作
- 顺序队列的基本算法及循环队列
- 栈和队列算法三之队列的基本操作
- 队列-基本算法
- 【科普·给学弟看的算法】队列的基础知识和基本运用(1):基本队列与优先队列
- 实现顺序队列各种基本运算的算法
- 实现顺序队列各种基本运算的算法
- 栈和队列算法一之栈的基本操作
- 算法与数据结构-队列的基本操作C语言实现
- 队列的链接存储结构——基本操作的实现
- 队列的链接存储结构---链队列
- 队列的基本实现
- android图片处理方法
- 你手里期权值多少钱?写给上市公司的同学
- 如何修改Android模拟器的hosts文件
- apriori 算法
- 使用ld的wrap选项替换已有库函数
- 链接队列的基本算法
- WIN7 系统下 android 环境变量配置
- C\C++几个内存处理函数
- Android江湖(含CD光盘1张)
- C++程序设计教程_基于Visual.Studio.2008
- 关于initializer element is not constant错误
- 进程互斥与竞态
- android 如何获取当前时间
- qeum配置