数据结构链队列:
发布网友
发布时间: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);
}
}