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

我的源程序如下:
#define NULL 0
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//#include<conio.h>
typedef int datatype;
typedef struct dlink_node{
datatype info;
struct dlink_node *llink,*rlink;
}dnode;
dnode *init_dlink_list()
{
dnode *head;
head=(dnode*)malloc(sizeof(dnode));
head->llink=NULL;
head->rlink=NULL;
return head;
}
dnode *input_dlink_list(dnode *head)
{
dnode *p,*q;
p=head;
datatype x;
printf("请输入结点的值:\n");
scanf("%d",&x);
puts("input the list end with '0':");
while(x)
{
q=(dnode*)malloc(sizeof(dnode));
q->info=x;
p->rlink=q;
q->llink=p;
q->rlink=NULL;
p=q;
scanf("%d\n",&x);
}
return head;
}

dnode *find_num_dlink(dnode *head,datatype x)
{
dnode *p;
p=head;
while(p&&p->info!=x)
p=p->rlink;
return p;
}
dnode *insert_dlink(dnode *head,datatype x,datatype y)
{
dnode *p,*q;
q=find_num_dlink(head,y);
if(!q)
{
printf("找不到值为%d的结点!\n",y);
return head;
}
p=(dnode*)malloc(sizeof(dnode));
p->info=x;
if(q==head)
{
p->llink=NULL;
p->rlink=q;
q->llink=p;
}
else
{
p->llink=q->llink;
p->rlink=q;
q->llink->rlink=p;
q->llink=p;
}
return head;
}
void print_dlink_list(dnode *head)
{
dnode *p;
p=head->rlink;
printf("双链表中的结点值分别为:\n");
while(p)
{
printf("%-5d",p->info);
p=p->rlink;
}
}

void main()
{
datatype i,j;
char ch;
struct dlink_node *head;
head=init_dlink_list();
head=input_dlink_list(head);
print_dlink_list(head);
printf("\n");
fflush(stdin);

printf("print your seletion (y/n):");
ch=getchar();
if (ch=='y')
{
printf("在y值结点前插入x结点,请输入x的值:\n");
scanf("%d",&i);
printf("输入y的值:\n");
scanf("%d",&j);
insert_dlink(head,i,j);
}
else
exit(-1);
print_dlink_list(head);
printf("\n");
}
我的运行结果如下:
请输入结点的值:
12 13 15 16 17 18
input the list end with '0':
0
0
双链表中的结点值分别为:
12 13 15 16 17 18
print your seletion (y/n):y
在y值结点前插入x结点,请输入x的值:
14
输入y的值:
15
双链表中的结点值分别为:
12 13 14 15 16 17 18
Press any key to continue
我想提醒大家注意
为什么会要求输入两个零。(我的原意只想输入一个)
然后我想是不是要吃掉回车,用了getch()函数。可惜不行。
我不明白这是为什么,能给解释一下吗?

搜索更多相关主题的帖子: dnode head 双链 include dlink 
2007-04-14 19:08
Vincentwong
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-3-23
收藏
得分:0 
回复:(pinglideyu)[讨论]对于双链表中存在的问题

看看你的scanf语句里面有没有空白字符,c++的编译器会忽略这些字符

2007-04-14 21:06
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
哦 我明白了。
当我把scanf("%d\n",&x)中的换行去掉时,就对了。
真的是这样的。谢了

~~我的明天我知道~~
2007-04-14 21:18
快速回复:[讨论]对于双链表中存在的问题
数据加载中...
 
   



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

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