| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 408 人关注过本帖
标题:[讨论]还是关于链表的问题
只看楼主 加入收藏
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
结帖率:100%
收藏
 问题点数:0 回复次数:9 
[讨论]还是关于链表的问题

程序如下:
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
struct list
{
int data;
struct list *next;
};
void print(struct list *head);
void insert(struct list *head);


void print(struct list *head)//打印链表
{
struct list *p;
p=head;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
}
void insert(struct list *head)//插入链表
{
struct list *pnew,*p;
int m;
char f,f1;
p=head;
aa:printf("Enter the number of you want:\n");
scanf("%d",&m);
pnew=(struct list*)malloc(sizeof(struct list));
if (pnew==NULL)
{
printf("NO MEMORY!\n");
return ;
}
pnew->data=m;
pnew->next=NULL;

for (p=head;p!=NULL;p=p->next)
if (p->next==NULL||p->next->data>pnew->data)
{
pnew->next=p->next;
p->next=pnew;
break;
}

while (1)
{
printf("是否继续操作(y/n):");
f=getchar();
if((f=='y')||(f=='Y')||(f=='N')||(f=='n'))
{
if((f=='y')||(f=='Y'))
{
printf("操作继续.\n");
goto aa;
}

else
{
printf("操作结束。\n");
break;
}

}
else
{
printf("输入错误。\n");
}
}
while (1)
{
printf("是否继续打印操作(y/n):");
f1=getchar();
if((f1=='y')||(f1=='Y')||(f1=='N')||(f1=='n'))
{
if((f1=='y')||(f1=='Y'))
{
printf("操作继续.\n");
print(head->next);
}

else
{
printf("操作结束。\n");
break;
}

}
else
{
printf("输入错误。\n");
}
}

}

void main()
{
struct list *head,*p,*rear;
int x,n,t=1;
printf("*********主菜单*********\n");
printf("*********1.插入链表*******\n");
printf("*********2.打印链表*******\n");

head=(struct list*)malloc(sizeof(struct list));
if (head==NULL)
{
printf("NO MEMORY!\n");
exit(-1);
}
head->next=NULL;
rear=head;
printf("Please input the date:\n");
while(t)
{
scanf("%d",&x);
p=(struct list*)malloc(sizeof(struct list));
if (p==NULL)
{
printf("NO MEMORY!\n");
exit(-1);
}
p->data=x;
p->next=NULL;
rear->next=p;
rear=p;
}

printf("请输入需要操作的序号:\n");
scanf("%d",&n);
switch(n)
{
case 1:void insert(struct list *head);break;
case 2:void print(struct list *head);
default:printf("输入错误!\n");break;
}
}

首先程序会提示:
*********主菜单***********
*********1.插入链表*******
*********2.打印链表*******
Please input the date:
然后我输入:1 2 3 4 5 6时
程序应该提示
请输入需要操作的序号:
可是我这个到这就没有了.我想请问这是为什么呀?
我对链表一直不懂!

搜索更多相关主题的帖子: 链表 
2007-03-30 20:14
Ashley
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-3-1
收藏
得分:0 
t=1
while(t) <==死循环

btw,lz你确定贴对代码了嘛?

2007-03-30 20:30
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

这个代码应该不对,所以拜托你们了。


~~我的明天我知道~~
2007-03-31 00:54
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
到这里怎么退出循环
while(t)
{
scanf("%d",&x);
p=(struct list*)malloc(sizeof(struct list));
if (p==NULL)
{
printf("NO MEMORY!\n");
exit(-1);
}
p->data=x;
p->next=NULL;
rear->next=p;
rear=p;
}

羊肉串 葡萄干 哈密瓜!!
2007-03-31 07:50
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
exit(-1);就是退出

雁无留踪之意,水无取影之心
2007-03-31 08:04
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
等下我到机房再给你看,现在没时间

雁无留踪之意,水无取影之心
2007-03-31 08:05
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
continue:退出本次循环,执行下一次循环。
break:退出循环语句,执行循环语句后面的代码。
exit:退出程序,也就是退出main()函数,(也可能是Winmain()函数)。

雁无留踪之意,水无取影之心
2007-03-31 08:05
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

绿色的是修改过的地方 主要的问题是你没有用键盘清空函数 fflush(stdin);以后要注意了 ,鼓捣链表这个很重要的!
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
struct list
{
int data;
struct list *next;
};
void print(struct list *head);
void insert(struct list *head);


void print(struct list *head)//打印链表
{
struct list *p;
p=head->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
}
void insert(struct list *head)//插入链表
{
struct list *pnew,*p;
int m;
char f,f1;
p=head;
aa:printf("Enter the number of you want:\n");
fflush(stdin);
scanf("%d",&m);
fflush(stdin);
pnew=(struct list*)malloc(sizeof(struct list));
if (pnew==NULL)
{
printf("NO MEMORY!\n");
return ;
}
pnew->data=m;
pnew->next=NULL;

for (p=head;p!=NULL;p=p->next)
if (p->next==NULL||p->next->data>pnew->data)
{
pnew->next=p->next;
p->next=pnew;
break;
}

while (1)
{
printf("是否继续操作(y/n):");
f=getchar();
if((f=='y')||(f=='Y')||(f=='N')||(f=='n'))
{
if((f=='y')||(f=='Y'))
{
printf("操作继续.\n");
goto aa;
}

else
{
printf("操作结束。\n");
break;
}

}
else
{
printf("输入错误。\n");
}
}
while (1)
{ fflush(stdin);
printf("是否继续打印操作(y/n):");
f1=getchar();
if((f1=='y')||(f1=='Y')||(f1=='N')||(f1=='n'))
{
if((f1=='y')||(f1=='Y'))
{
printf("操作继续.\n");
print(head);
}

else
{
printf("操作结束。\n");
break;
}

}
else
{
printf("输入错误。\n");
}
}

}

void main()
{
struct list *head,*p,*rear;
int x,n;
printf("*********主菜单*********\n");
printf("*********1.插入链表*******\n");
printf("*********2.打印链表*******\n");

head=(struct list*)malloc(sizeof(struct list));
if (head==NULL)
{
printf("NO MEMORY!\n");
exit(-1);
}
head->next=NULL;
rear=head;
printf("Please input the date:\n");
scanf("%d",&x);
while(x)
{

p=(struct list*)malloc(sizeof(struct list));
if (p==NULL)
{
printf("NO MEMORY!\n");
exit(-1);
}
p->data=x;
rear->next=p;
rear=p;
scanf("%d",&x);
}
p->next=NULL;
fflush(stdin);

printf("请输入需要操作的序号:\n");
scanf("%d",&n);
switch(n)
{
case 1:insert(head);break;
case 2:print(head);break;
default:printf("输入错误!\n");break;
}
}


羊肉串 葡萄干 哈密瓜!!
2007-03-31 08:32
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
这个fflush(stdin),我的老师没有给讲过,自然就不知道怎么用了。
这个函数到底怎么用,什么时候用,需要注意哪些问题。
拜托各位在费费神。
呵呵呵。。。。。
辛苦你们了!

~~我的明天我知道~~
2007-03-31 09:29
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
就是清空键盘缓冲区。。。。
scanf("%d",&x);你在对这个X输入值的时候是 :1 空格2 回车 ,次时2就留在了键盘缓冲区里了 需要fflush(stdin)来清空。

羊肉串 葡萄干 哈密瓜!!
2007-03-31 10:28
快速回复:[讨论]还是关于链表的问题
数据加载中...
 
   



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

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