C语言数据结构链队列(创建、入队、出队、取对头元素、遍历)
C语言数据结构链队列(创建、入队、出队、取对头元素、遍历)
/*
*链队列的相关操作
*创建一个rear和front指针的结构体
*创建一个链表的结构体
*初始化时rear和front指向head指针
*采用尾插法创建链表
*操作 (初始化、创建、入队 、出队、取对头元素、遍历)
*/
#include
#include
#include
#include
#define NAMESIZE 255//字符串的最大长度
#define OK 1
#define ERROR 0
int count =0;//记录队列元素的个数
typedef int IdTYpe;//数据域的编号的数据类型
typedef char* NameType;//数据域的名称的指针的数据类型
typedef int Statu;//函数点的返回值数据类型
typedef struct elementtype
{
IdTYpe id;//数据域的编号
NameType name;//数据域的名称
}ElementType;//数据域的结构体
typedef struct linknode
{
ElementType data;//链队列的数据域
struct linknode *next;//指向下一个节点的指针
}Link_Node;//链表的结构体
typedef struct linkqueue
{
Link_Node *rear;
Link_Node *front;//头指针和尾指针
}Link_Queue;//链栈的指针域结构体
void INit_linkqueue(Link_Node*head,Link_Queue*q);//链队列的初始化
Statu create_linkqueue(Link_Queue*q);//链队列的创建
Statu pop_linkqueue(Link_Queue*q,ElementType *data);//出队
Statu push_linkqueue(Link_Queue*q,ElementType data);//入队
Statu getdata_linkqueue(Link_Queue*q,ElementType*data);//取对头元素
Statu empty_linkqueue(Link_Queue*q);//判断对列是否为空
void Display_linkqueue(Link_Queue*q);//遍历队列的元素
void main()
{
Link_Node*head;//链表的头指针
ElementType data;//入队元素
ElementType key;//出队的元素
ElementType data1;//取对头元素
head=(Link_Node*)malloc(sizeof(Link_Node));
Link_Queue*q;
q=(Link_Queue*)malloc(sizeof(Link_Queue));
if(head!=NULL&&q!=NULL)
//对其进行初始化
INit_linkqueue(head,q);
//对其进行创建
int result=create_linkqueue(q);
if(result==ERROR)
printf("队列创建失败\n");
else
{
printf("队列创建成功\n");
printf("队列的元素的个数为%d\n",count);
}
if(empty_linkqueue(q))
printf("队列为空\n");
else
printf("队列不为空\n");
printf("请输入要入队元素的名称\n");
data.name=(NameType)malloc(sizeof(char)*NAMESIZE);
scanf("%s",data.name);
data.id=rand()%50;//产生随机数字
int result1=push_linkqueue(q,data);
if(result1==OK)
printf("入队成功\n");
else
printf("入队失败\n");
data1.name=(NameType)malloc(sizeof(char)*NAMESIZE);
int result2=getdata_linkqueue(q,&data1);
if(result2==ERROR)
printf("取对头元素失败\n");
else
{
printf("取对头元素成功\n");
printf("对头元素为[%d,%s]\n",data1.id,data1.name);
}
key.name=(NameType)malloc(sizeof(char)*NAMESIZE);
int result3=pop_linkqueue(q,&key);
if(result3==ERROR)
printf("出队失败\n");
else
{
printf("出队成功\n");
printf("出队的元素为[%d,%s]\n",key.id,key.name);
}
printf("队列元素的遍历的结果为\n");
Display_linkqueue(q);
}
void INit_linkqueue(Link_Node*head,Link_Queue*q)//链队列的初始化
{
q->front=head;
q->rear=head;//对指针进行初始化
}
Statu create_linkqueue(Link_Queue*q)//链队列的创建
{
if(q->front==NULL||q->rear==NULL)
return ERROR;
Link_Node *s;//循环创建的链表节点
char name[NAMESIZE];
printf("请输入数据域的名称\n");
while(scanf("%s",name)!=EOF)
{
if(strcmp(name,"^")==0)
break;
else
{
s=(Link_Node*)malloc(sizeof(Link_Node));
s->data.name=(NameType)malloc(sizeof(char)*NAMESIZE);
s->data.id=rand()%50;//随机函数
strcpy(s->data.name,name);//字符串的赋值
q->rear->next=s;
q->rear=s;
s->next=NULL;// 最后一个节点的next指针为空
count++;//队列节点的计数
}
}
return OK;
}
Statu empty_linkqueue(Link_Queue*q)//判断对列是否为空
{
if(q->rear==q->front)
return OK;
else
return ERROR;
}
Statu push_linkqueue(Link_Queue*q,ElementType data)//入队
{
Link_Node *node;
node=(Link_Node*)malloc(sizeof(Link_Node));
node->data.name=(NameType)malloc(sizeof(char)*NAMESIZE);
strcpy(node->data.name,data.name);
node->data.id=data.id;
q->rear->next=node;
q->rear=node;
node->next=NULL;
return OK;
}
Statu pop_linkqueue(Link_Queue*q,ElementType *data)//出队
{
Link_Node*node;
node=(Link_Node*)malloc(sizeof(Link_Node));
//出队进行队列的判空
if(empty_linkqueue(q))
return ERROR;//队列为空退出函数
else
{
node=q->front->next;
data->id=node->data.id;
strcpy(data->name,node->data.name);
q->front->next=node->next;//将头指针指向下一个节点
free(node); //释放内存
}
return OK;
}
Statu getdata_linkqueue(Link_Queue*q,ElementType*data)//取对头元素
{
Link_Node*node;
if(empty_linkqueue(q))
return ERROR;
else
{
node=q->front->next;
data->id=node->data.id;
strcpy(data->name,node->data.name);
return OK;
}
}
void Display_linkqueue(Link_Queue*q)
{
ElementType data;
//判空
if(empty_linkqueue(q))
return ERROR;
else
{
while(empty_linkqueue(q)!=OK)
{
data.name=(NameType)malloc(sizeof(char)*NAMESIZE);
pop_linkqueue(q,&data);
printf("[%d,%s]\t",data.id,data.name);
}
}
}
C语言数据结构链队列(创建、入队、出队、取对头元素、遍历)相关教程
南京邮电大学汇编——实验一:汇编语言语法练习与代码转换
南京邮电大学汇编——实验一:汇编语言语法练习与代码转换 南京邮电大学汇编——实验一:汇编语言语法练习与代码转换 实验环境 实验一:在屏幕下打印学号 实验代码 DOSBOX使用记录 实验二:改错汇编源代码 实验环境 DosBox Tasm 实验一:在屏幕下打印学号 说
R语言--(7)--自定义函数
R语言--(7)--自定义函数 变量名 - function(arg_1, arg_2, ...) expression 编写一个用二分法求非线性方程根的函数,并求方程 x3?x?1=0x^3 -x -1 =0x3?x?1=0 在区间 [a,b][a,b ][a,b] 内的根,精度要求 ?=10?6\epsilon=10^{-6}?=10?6 绘制函数图像 x=seq(-5,5
rabbitmq高级特性(延迟队列)
rabbitmq高级特性(延迟队列) 1.maven依赖 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optio
2020-10-14 //严蔚敏《数据结构》 //最小生成树--Prim算法
2020-10-14 //严蔚敏《数据结构》 //最小生成树--Prim算法 //严蔚敏《数据结构》//最小生成树--Prim算法//自学中,加油!#includeiostream#includestringusing namespace std;const int MaxVertexnum=20;const int Infinity=INT_MAX;#define InfoType string#
重学数据结构-二分搜索树及它的各种操作(kotlin实现)
重学数据结构-二分搜索树及它的各种操作(kotlin实现) 在开始之前,应该先讲一下什么是二叉树。 什么是二叉树? 和链表一样,同样也是动态数据结构 二叉树具有唯一的根节点 class NodeE { var e: E? = null var left: NodeE? = null var right: NodeE? = null}
【C语言程序设计】C语言实现一元二次方程的求解
【C语言程序设计】C语言实现一元二次方程的求解 一元二次方程的一般形式: 分析求解过程: 当a=0,不能构成一元二次方程。 当b=0,不一定能构成等式 当c=0,即为恒等式0=0 当a不等于0,可构成一元二次方程,考虑实根和虚根 基于伪代码,实现一元二次方程的求
【Go语言教程】(一) 下载、安装、配置
【Go语言教程】(一) 下载、安装、配置 一、下载 Go语言官方网站地址https://golang.google.cn/ Go语言中文网下载地址https://studygolang.com/dl 二、安装 双击安装包,一直下一步就行 安装完成 三、配置 1.配置Go运行目录 2.配置GoPath 3.配置路由(可要可不
数据结构(邓俊辉):有序向量(2.查找算法)
数据结构(邓俊辉):有序向量(2.查找算法) 首先 顺序查找 的很简单理解的,就是按顺序一个个从后到前查找(书中约定返回命中的多个相同元素的最大的秩)。 template typename TRank Vector :: find(T const e, Rank lo, Rank hi) const{while ((lo hi--) (