问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构链队列:

发布网友 发布时间:2022-04-22 12:35

我来回答

2个回答

热心网友 时间:2022-07-12 00:41

#include<stdlib.h>
#include<stdio.h>
typedef char elem;
//这是一个线性链表,可以任意位置插入删除。如果只能从头删除,从尾插入就是队列了。你自己写两个方法吧
typedef struct node{
elem data;
struct node *next;
}node,* linklist;
//创建一个结点
int creat(linklist &l)
{
l=(linklist)malloc(sizeof(node));
l->next=NULL;
if(!l)return 0;
return 1;
}
//以l结点为头的链表长
int lenth(linklist l)
{
int j=1;
linklist getl=l;
while(getl->next)
{
getl=getl->next;
j++;
}
return j;
}
//以l结点为头,第i个结点置 e
int put(linklist l,int i,elem e)
{
int j;
linklist getl=l;
for(j=1;j<i;j++)
getl=getl->next;// find the i node
if(!getl)return 0;
getl->data=e;
return 1;
}
//以l结点为头的链表,向尾部加结点 b
int addone(linklist l,linklist b)
{
linklist cur_node=l;
//find the last node

while(cur_node->next)
{
cur_node=cur_node->next;
}

cur_node->next=b;
b->next=NULL;
return 1;
}
int insert(linklist l,int i,linklist b)
{
int j;
linklist getl=l;
linklist q;
for(j=1;j<i-1;j++)
getl=getl->next;// find the i-1 node
q=getl->next;
getl->next=b;
b->next=q;
return 1;
}
int dlt(linklist l,int i)
{
int j;
linklist getl=l;
linklist q;
for(j=1;j<i-1;j++)
getl=getl->next;// find the i-1 node
q=getl->next;//find the i node
getl->next=q->next;
free(q);
return 1;
}
int visit(linklist l)
{
linklist cur_node=l;
while(cur_node)
{
printf("%c\n",cur_node->data);
cur_node=cur_node->next;
}
return 1;
}
void main()
{
linklist ft;//a
linklist a;//b
linklist b;//c
linklist c;//i
// char *a;
// char b[10]="hello";
// a=b;
// printf("%s",a);
creat(ft);
creat(a);
creat(b);
creat(c);
put(ft,1,'a');
addone(ft,a);
put(ft,2,'b');
addone(ft,b);
put(ft,3,'c');
insert(ft,3,c);
put(ft,3,'i');
dlt(ft,2);
visit(ft);
printf("%d\n",lenth(ft));
visit(b);
printf("%d\n",lenth(b));
}
自己琢磨琢磨

热心网友 时间:2022-07-12 00:41

零时打的,没有检查的,可能有点错误,请谅解,这是调用函数:
typedef struct qnode
{
DataType date;
struct qnode *next;
}LQNode;

typedef struct
{
LQNode *front;
LQNode *rear;
}LQNode;

//初始化链表
void QueueInitiate(LQNode Q)
{
Q->rear=NULL;
Q->front=NULL;
}

//非空否
int QueueNotEmpty(LQNode Q)
{
if(Q.front==NULL)
return 0;
else
return 1;
}

//入队列
int QueueAppend(SLQNode *Q,Datatype x)
{
LQNode *p;
if((p=(LQNode *)malloc(sizeof(LQNode)))==NULL)
{
printf("内存不足\n");
return 0;
}
else
{
p->date=x;
p->next=NULL;
if(Q->rear!=NULL)
Q->rear->next=p;
Q->rear=p;
if(Q->front==NULL)
Q->front=p;
return 1;
}
}

//出队列
int QueueDelete(LQNode *Q,DataType *d)
{
LQNode *p;
if(Q->front==NULL)
{
printf("队列已空无数据出队列\n");
return 0;

}
else
{
*d=Q->front->data;
p=Q->front;
Q->front=Q->front->next;
if(Q->front==NULL)
Q->rear=NULL;
free(p);
return 1;
}
}

//取队头数据元素
int QueueGet(LQNode Q,DataType *d)
{
if(Q->front==NULL)
{
printf("队列已空无元素可取\n");
return 0;
}
else
{
*d=Q->front->data;
return 1;
}
}

//撤消动态申请链表空间
void Destroy(LQNode Q)
{
LQNode *p,*p1;
p=Q.front;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? C语言关于链表的问题 配对碱基链 C++ 语言 单链表初始化 数据结构中的链表是不是可以存放不同类型的数据 int型char型之类的 还是只能存放同一种类型的元素? 配对碱基链C语言 顺序链表到底是什么,在哪里讲的? 二叉树,如何将二叉树的游标表示法转为左右链表示。 二叉链表应如何建立 谁告诉我c++里的链表是什么东西啊? c语言,链表头插法,结构体中的char数组如何赋值 链表操作 c语言链表问题 芥菜腌制出来口感不脆是怎么回事 两个char*数组类型的链接 1974年属什么生肖 请问1974年出生的属虎是啥星座 荣耀20pro新机充电六个小时对电池有影响吗? 请问1974年出生的属虎是啥星座? 1974年属虎哪个月出生最好 1974年出生的属虎人与哪种生肖婚配最好 c# string 类型如何转换成char*类型 以二叉链为存储结构,写一算法求二叉树的叶子结点个数 为什么C语言链表中定义的结构体中要是有2个char,最后printf运行时出错str 我在C++编单链表链表的数据域是char型的,想以3空格作为输入结束 的标志 荣耀20PRO 8+128和荣耀9X 8+256那个值得购买价格差不多,没钱啊想用一个能时间长的? 快手的聊天室是干嘛的 快手直播聊天室怎么开视频 进好友直播间为何会自动上麦 快手直播聊天室四个人怎么弄 快手开直播6人聊天室进直播间黑屏别人进直播间什么样子 快手直播间聊天室上麦是官方邀请,还是主播邀请 快手聊天室麦位怎么添加备注 快手聊天页面不在线,为什么聊天室直播显示在线 为何我的快手没有聊天室? 快手直播聊天室,主播把人移出唛位怎么才能恢复? 快手聊天室怎么开取九个脉 快手聊天室怎么开取九人间 快手聊天室怎么开16个麦 脆萝卜干儿怎么腌制?不辣。 自制萝卜干的腌制方法大全