| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:[原创]单链表常用运算问题
只看楼主 加入收藏
sdwin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-10-4
收藏
 问题点数:0 回复次数:14 
[原创]单链表常用运算问题

这是我编写的程序,是关于创建链表,删除,插入等等问题!但是就是有些错误,改来改去还是错!!请您帮忙修改一下好吗?? #include <stdio.h> #include <malloc.h> typedef struct node *point; struct node { int data; point next; }; typedef point list;

list creat() { point p,q; list head; int x,i=0; head=(struct node *)malloc(sizeof(struct node)); p=head; printf("请输入数字:"); scanf("%d",&x); while(x!=0) { q=(struct node *)malloc(sizeof(struct node)); q->data=x; p->next=q; p=q; scanf("%d",&x); } p->next=NULL; p=head; while(p->next) { printf("%d->",p->next->data); p=p->next; } printf("NULL\n"); return head; }

int length(point p) { int i=0; while(p->next!=NULL) { p=p->next; i++; } return i; }

list cha(list head,point p) { int x,i=0,y; point q; printf("\n你想插入什么数:"); scanf("%d",&y); printf("插在第几位,请输入序号:"); scanf("%d",&x); while(i<x-1) { p=p->next; i++; } q=(struct node *)malloc(sizeof(struct node)); q->data=y; q->next=p->next; p->next=q; return head; }

list end(list head,point p) { point q; int x,j=0; printf("请输入要删除的数:"); scanf("%d",&x); while(p->next) { if(p->next->data==x) { p->next=p->next->next; q=p->next; free(q); } else {p=p->next;j++;} } p=head; if(j==length(p))printf("你输入的数不存在"); printf("删除后表变成:"); while(p->next) { p=p->next; printf("%d->",p->data); } printf("NULL\n\n"); return head; }

void swb(list head,point p) { point w,q; while(p->next) { w=p; w=w->next; while(w->next) if(w->next->data==p->next->data) { w->next=w->next->next; q=w->next; free(q); } else w=w->next; p=p->next; } p=head; printf("删除重复数据,最终结果:"); while(p->next) { p=p->next; printf("%d->",p->data); } printf("NULL\n\n"); }

void main() { int leng; list head; point p; head=creat(); p=head; leng=length(p); printf("\n表长是:%d\n",leng); head=cha(head,p); p=head; printf("插入后表变为:"); while(p->next) { p=p->next; printf("%d->",p->data); } printf("NULL\n\n"); p=head; head=end(head,p); p=head; swb(head,p); }

搜索更多相关主题的帖子: 单链 运算 
2005-10-04 20:31
sdwin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-10-4
收藏
得分:0 
本人用的是VC++工具编写的,各位帮帮忙好吗??偶调试了好久了!!就是不知道怎么回事
2005-10-04 20:35
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
晕,好多错误.
struct node
{
int data;
point next;
};
这个是数据结构的伪码,不能直接运行,应该改为
 struct {
int data;
point next;
}node;

******************************
typedef point list; 这句话有点多余,后面要用list定义的地方用point定义就好,而且这个定义与后面的内容有冲突,后面好象不是把list当指针类型定义在用.

我的征途是星辰大海
2005-10-05 13:30
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
象creat()里面 list head; head=(struct node *)malloc(sizeof(struct node)); 应改为 node head; head=(struct node *)malloc(sizeof(struct node)); if (!head)exit; 一定要判断空间分配是否成功.后面的也是.

我的征途是星辰大海
2005-10-05 13:45
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
printf("%d->",p->next->data);应该写成printf("%d",p->next->data);
这个实际上没什么问题

[此贴子已经被作者于2006-6-1 14:29:42编辑过]


我的征途是星辰大海
2005-10-05 13:49
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
还有很多错误没改完,但我要下了,不好意思.下次再接着改

我的征途是星辰大海
2005-10-05 13:55
sdwin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-10-4
收藏
得分:0 
非常感谢你能回复!!整个程序是可以调试成功的!!!你帮我修改的地方,有些其实是可以的,比如 struct node { int data; point next; }; 只是定义了一个结构体类型(和C语言书对过了,格式正确的),我对这个结构体类型自定义了2个指针类型:一个是:typedef struct node *point;用于指向工作指针变量,而另一个 typedef point list; 只是为了程序的可读性,用来指向头指针变量! 你有个地方提的很好:就是if (!head)exit; 一定要判断空间分配是否成功.后面的也是. 呵呵!我没注意到!! 还有你帮我改的地方:printf("%d->",p->next->data);应该写成printf("%d",p->next->data); 我这么做是为了更好的显示这个结果而已呀!!!
2005-10-05 18:34
sdwin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-10-4
收藏
得分:0 
我这个程序最大错误在于最后一个函数void swb(list head,point p)中,这个函数的作用是清除表中重复的结点,我明明让
w=p了,而p=head了,可是
w-&gt;next=w-&gt;next-&gt;next;竟然说我表达错误!!!想不通啊!!难道不能这么表达吗
2005-10-05 18:37
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
不好意思, 误人子弟了

不过
struct node
{
int data;
point next;
};
这样写 我没调成功过,
w-&gt;next=w-&gt;next-&gt;next的确不行, 我的大学老师跟我说的,前几天刚犯这个错误

我的征途是星辰大海
2005-10-05 23:19
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
好象是因为系统不能同时处理2个指针, 我的老师也没说清楚

我的征途是星辰大海
2005-10-05 23:22
快速回复:[原创]单链表常用运算问题
数据加载中...
 
   



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

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