C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1、数据结构-链式队列的实现-C语言
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr _front; //头指针
QueuePtr _rear; //尾指针
} LinkQueue;
//构造空队列---1
void InitQueue(LinkQueue* Q);
//队列的销毁---2
void DestroyQueue(LinkQueue* Q);
//队列的清空---3
void ClearQueue(LinkQueue* Q);
//判断队列是否为空---4
void QueueEmpty(LinkQueue Q);
//队列的长度---5
int QueueLength(LinkQueue Q);
//取队列头元素---6
void GetHead(LinkQueue Q);
//插入---7
void EnQueue(LinkQueue* Q, int value);
//删除---8
void DeQueue(LinkQueue* Q,int* value);
//依次访问队列元素---9
void QueueTraverse(LinkQueue Q);
void ShowHelp();
//-----------------------------------------------
void ShowHelp()
{
printf("1---初始化链队列\n");
printf("2---销毁链队列\n");
printf("3---清空链队列\n");
printf("4---判断链队列是否为空\n");
printf("5---链队列长度\n");
printf("6---链队列头元素\n");
printf("7---插入\n");
printf("8---删除\n");
printf("9---依次访问链队列元素\n");
}
void InitQueue(LinkQueue* Q)
{
QueuePtr p = (QueuePtr*) malloc(sizeof(QueuePtr));
if(!p)
{
printf("分配失败.\n");
return;
}
(*Q)._rear = p;
(*Q)._front = p;
(*Q)._front->next = NULL;
}
void DestroyQueue(LinkQueue* Q)
{
QueuePtr p1 = (*Q)._front;
QueuePtr p2;
while(p1){
p2 = p1->next;
free(p1);
p1 = p2;
}
(*Q)._rear = NULL;
(*Q)._front = NULL;
}
void ClearQueue(LinkQueue* Q)
{
QueuePtr p1 = (*Q)._front->next;
QueuePtr p2;
while(p1){
p2 = p1->next;
free(p1);
p1 = p2;
}
(*Q)._front->next = NULL;
(*Q)._rear = (*Q)._front;
}
void QueueEmpty(LinkQueue Q)
{
if(Q._rear == Q._front)
printf("此队列为空。\n");
else
printf("此队列不为空。\n");
}
int QueueLength(LinkQueue Q)
{
QueuePtr p = Q._front->next;
int num = 0;
while(p){
num++;
p=p->next;
}
return num;
}
void GetHead(LinkQueue Q)
{
if(Q._rear == Q._front)
{
printf("此队列为空。\n");
return;
}
int value = Q._front->next->data;
printf("此队列头元素为%d。\n",value);
}
void EnQueue(LinkQueue* Q, int value)
{
QueuePtr p = (QueuePtr*) malloc(sizeof(QueuePtr));
p->data = value;
p->next = NULL;
(*Q)._rear->next = p;
(*Q)._rear = p;
printf("插入成功\n");
}
void DeQueue(LinkQueue* Q,int* value)
{
if((*Q)._rear == (*Q)._front)
{
printf("队列中无元素,不能再进行出队列操作.\n");
return;
}
QueuePtr p = (*Q)._front->next;
*value = p->data;
(*Q)._front->next = p->next;
free(p);
printf("删除成功\n");
}
void QueueTraverse(LinkQueue Q)
{
if(Q._rear == Q._front){
printf("此队列为空。\n");
return;
}
printf("从队列头到尾元素依次为:");
QueuePtr p = Q._front->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作的更多相关文章
- C语言实现链式队列
链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...
- 数据结构 链式哈希表(Hash Table)的接口定义与实现分析(完整代码)
链式哈希表的接口定义 关于哈希表与链式哈希表的描述可以参阅:http://www.cnblogs.com/idreamo/p/7990860.html 链式哈希表的操作与属性有:初始化.销毁.插入元素 ...
- Javascript、C#、php、asp、python 等语言的链式操作的实现
一.什么是链式操作 把需要的下一步操作的对象通过上一步操作返回回来.使完成某些功能具有持续性. 二.链式操作优点 代码更精简优雅.链式操作能大大精简代码量,多项操作一行代码一气呵成,搞定: 链式操作应 ...
- 分层、链式分析、url、联系的长度
分层.链式分析.url.联系的长度. 分层结构符合软件处理的工具链性和步骤性: 分层的每一次都是一个节点或步骤: 链式结构普遍存在于自然界,比如食物链: 联系是普遍存在的,不只是两个事物间的联系,而且 ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- C语言 栈 链式结构 实现
一个C语言链式结构实现的栈 mStack (GCC编译). /** * @brief C语言实现的链式结构类型的栈 * @author wid * @date 2013-10-30 * * @note ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- c数据结构链式存储-静态链表
#include "string.h" #include "ctype.h" #include "stdio.h" #include &qu ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
随机推荐
- ffmpeg设置avformat_open_input( )超时 -stimeout
ffmpeg用avformat_open_input()解析网络流时,默认是阻塞的. 当遇到解析错误的网络流时,会导致该函数长时间不返回. 为此可以设置ffmpeg的-stimeout 的参数,要注意 ...
- 10 个你需要了解的 Linux 网络和监控命令
我下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nsloo ...
- matlab 在柱状图上 显示数字
x = rand(100,1);[n,y] = hist(x);bar(y,n);for i = 1:length(y)text(y(i),n(i)+0.5,num2str(n(i)));end
- SolrCloud中的文件与Collection管理
转载请出自出处:http://eksliang.iteye.com/blog/2124078 http://eksliang.iteye.com/ 一.内嵌启动SolrCloud时端口默认分配 当 S ...
- java用JDBC连接数据库的方式
//驱动位置String sDBDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//连接数据库地址名字String ...
- 【总结整理】微信产品-张小龙-PM学习总结
伟大的产品可以满足人类的情感需求.找到需求背后的心理诉求产品的终极目标是满足任性需求,不在产品中掺杂自己的道德感.“我有个好主意”,往往都是脱离用户需求的. 1,不直接满足用户需求2,用户需求是零散的 ...
- 前端性能分析:分析百度和sogou
先用httpwatch录制这两个网站:www.baidu.com www.sogou.com 由上图可以看到: 百度用时0.278s 发送7831B 接收36620B 13个请求 搜狗 ...
- 张超超OC基础回顾01_类的创建,申明属性,以及本质
一. 类的声明和实现&规则 1.如何编写类的声明 以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可 注意: 类名的首字符必 ...
- convertTo
转自 http://blog.csdn.net/xiaxiazls/article/details/51204265 在使用Opencv中,常常会出现读取一个图片内容后要把图片内容的像素信息转为浮点并 ...
- CentOS7虚拟机安装Linux教程及安装后所遇到的问题
1.VMware Workstation15下载. 官方链接:http://download3.vmware.com/software/wkst/file/VMware-workstation-ful ...