标题:有关队列链表的问题
只看楼主
飞寒
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-19
 问题点数:0 回复次数:6 
有关队列链表的问题

各位大虾,请帮我看一下这个程序!我看这个程序已经看了很久了,但还是看不出有什么错!
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int dataType;


typedef struct dddd
{
dataType data;
struct dddd * next;
}node;

typedef struct konde
{
node * front;
node * rear;
}qnode;


void initqueue(qnode * l)
{
if((l->front=(node*)malloc(sizeof(node)))==NULL)
{
printf("内存已满!\n");
exit(0);
}
l->front->next=NULL;
l->rear=l->front;
}

void destroy(qnode * l)
{
node * p;
if(l->front==l->rear)
{
free(l->front);
return;
}
while(l->front->next!=NULL)
{
p=l->front->next;
l->front->next=p->next;
free(p);
}
free(l->front);
}

void queueinsert(qnode * l, dataType x)
{
node *p;
if((p=(node*)malloc(sizeof(node)))==NULL)
{
printf("内存已满!\n");
exit(0);
}
p->data=x;
p->next=l->rear->next;
l->rear->next=p;
l->rear=p;
}

void queuedelete(qnode * l,dataType * x)
{
node * p;
if(l->front==l->rear)
{
printf("该队列已空!\n");
return;
}
else if(l->front->next==l->rear)
{
*x=l->rear->data;
l->front->next=l->rear->next;
free(l->rear);
l->rear=l->front;
}
else
{
p=l->front->next;
*x=p->data;
l->front->next=p->next;
free(p);
}
return;
}

void makenull(qnode * l)
{
node * p;
if(l->front==l->rear)
{
printf("该队列已空!\n");
return;
}
while(l->front->next!=NULL)
{
p=l->front->next;
l->front->next=p->next;
free(p);
}
l->rear=l->front;
}

void queueget(qnode * l,dataType * x)
{
if(l->front==l->rear)
{
printf("该队列已空!\n");
return;
}
*x=l->front->next->data;
return;
}


void main()
{
qnode * l;
int x=1,i=2;
initqueue(l);
queueinsert(l,x);
queuedelete(l,&i);
printf("%d\t",i);
destroy(l);
}

搜索更多相关主题的帖子: 链表 队列 node 内存 include 
2007-10-21 00:02
飞寒
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-19
得分:0 

已经解决了

2007-10-21 10:35
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
得分:0 

贴出程序应该也要说出你出现什么问题.

------------------不为别的,就为你,我的理想!-----------------
2007-10-21 22:27
飞寒
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-19
得分:0 

是因为我觉得程序没问题,编译的时候也没有问题,但是运行的时候却不能运行!
但是现在解决了,是我的超级粗心的错误!
void main()
{
qnode * l;
int x=1,i=2;
initqueue(l);
queueinsert(l,x);
queuedelete(l,&i);
printf("%d\t",i);
destroy(l);
}
这里定义的l是指针却没有初始化,是我的一个同学告诉我的!
当时我还被说了很久呢

2007-10-22 21:29
飞寒
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-19
得分:0 
我最近有点事,没有上网,所以才那么久才回复!
2007-10-22 21:31
风的声音
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2007-3-27
得分:0 
在主函数里,直接设置一个qnode类型的变量,不用指针不是更简单吗,只要在相应的函数改称引用类型。
把q->font等类似的相应改称成q.font.也不用给指针初始化了。

一念心清净,莲花处处开。 一花一净土,一土一如来。
2007-10-22 21:34
飞寒
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-19
得分:0 

是啊,我后来也跟你说的一样做了

2007-10-22 21:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-179426-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.959195 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved