| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15716 人关注过本帖, 5 人收藏
标题:[原创]链表基本操作的程序实现.
只看楼主 加入收藏
ㄣ黑銫禮ゞ菔
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-6
收藏
得分:0 

好乱,给个完整版


冰雪再寒冷严冬再漫长,也无法阻挡春的回归。可我们都忘却了,春天再逼近,也无法阻挡下一个冬天的来临……
2007-06-06 16:37
mdqyy116
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(nuciewth)#include
写的不错,,,就是第一个接点没有包括进去,,如果要删除的是第一个接点怎么办!!!
2007-06-06 18:04
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

第一个是头结点,只指示链表的,如果连这个都删了,那这个链表也就不存在了.


倚天照海花无数,流水高山心自知。
2007-06-06 22:21
ㄣ黑銫禮ゞ菔
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-6
收藏
得分:0 

能不能帮我修改一下!


#include "stdio.h"
#include "iostream.h"
#include "malloc.h"

struct LINKLIST
{
int data;
struct LINKLIST *head,*last;
}

/******************************/
/* 按序号查找 */
/******************************/

LINKLIST *get(int i,LINKLIST *head)
{
int j;
p=head;
while((j<i)&&(p->next!=NULL))
{
p=p-next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
/******************************/
/* 按值查找 */
/******************************/
LINKLIST *locate(DATATYPE2 X,LINKLIST *head)
{
LINKLIST *p;
p=head->next;
while(p!=NULL)
if(p->data==x)
return p;
else
p=p->next;
return NULL;
}
/******************************/
/* 在以知结点的后面插入新结点 */
/******************************/
void insertafter(DATATYPE2 x,LINKLIST *p)
{
LINKLIST *t;
t=malloc(sizeof(LINKLIST))
t->data=p->next;
p->next=t;
}
/******************************/
/* 在以知结点的前面插入新结点 */
/******************************/
int insertbefor(DATATYPE2 x,int i,LINKLIST *head)
{
LINKLIST *p;
int r=1;
p=get(i-1,head);
if(p!=NULL)
insertbefor(x,p)
else
r=0;
return r;
}
/******************************/
/* 删除第i个结点 */
/******************************/
int deleteordor(int i,LINKLIST *head)
{
LINKLIST *p;
int r=1;
p=get(i-1,head);
if((p!=NULL)&&(p->next!=NULL))
deletefter(p);
else
r=0;
return r;
}
void main()
{
LINKLIST *head,*last,*t;
char ch;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST)) //建立表头结点
head=t;
last=t;
t->next=NULL;
while(ch=getchar()!='$')
{
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST));
t->data=ch;
last->next=t;
last=t;
t->next=head;
}
}


冰雪再寒冷严冬再漫长,也无法阻挡春的回归。可我们都忘却了,春天再逼近,也无法阻挡下一个冬天的来临……
2007-06-07 11:16
ㄣ黑銫禮ゞ菔
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-6
收藏
得分:0 

要求:建立一个带有头结点的单向循环链表

用户输入命令有:

1:输出单向循环链表的所有结点的值
2:查找第i个结点或值为某一个值的结点
3:在指定的地方插入一个结点
4:删除指定的结点

我有个还没完成的程序 请指教 能帮忙完成主函数的调用最好 希望有个菜单!


#include "stdio.h"
#include "iostream.h"
#include "malloc.h"

struct LINKLIST
{
int data;
struct LINKLIST *head,*last,*next;
};

/******************************/
/* 按序号查找 */
/******************************/

struct LINKLIST *get(int i,struct LINKLIST *head)
{
int j;
p=head;
while((j<i)&&(p->next!=NULL))
{
p=p-next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
/******************************/
/* 按值查找 */
/******************************/
struct LINKLIST *locate(int x,struct LINKLIST *head)
{
struct LINKLIST *p;
p=head->next;
while(p!=NULL)
if(p->data==x)
return p;
else
p=p->next;
return NULL;
}
/******************************/
/* 在以知结点的后面插入新结点 */
/******************************/
void insertafter(DATATYPE2 x,LINKLIST *p)
{
struct LINKLIST *t;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST))
t=p->next;
p->next=t;
}
/******************************/
/* 在以知结点的前面插入新结点 */
/******************************/
int insertbefor(int x,int i,struct LINKLIST *head)
{
struct LINKLIST *p;
int r=1;
p=get(i-1,head);
if(p!=NULL)
insertbefor(x,i,p)
else
r=0;
return r;
}
/******************************/
/* 删除第i个结点 */
/******************************/
int deleteordor(int i,struct LINKLIST *head)
{
struct LINKLIST *p;
int r=1;
p=get(i-1,head);
if((p!=NULL)&&(p->next!=NULL))
deleteordor(i,p);
else
r=0;
return r;
}
void main()
{
struct LINKLIST *head,*last,*t;
char ch;
int i.k;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST)) //建立表头结点
head=t;
last=t;
t->next=NULL;
count<<"请输入结点,以0结束"
while(ch=getchar()!='0')
{
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST));
t->data=ch;
last->next=t;
last=t;
t->next=head;
}

}


冰雪再寒冷严冬再漫长,也无法阻挡春的回归。可我们都忘却了,春天再逼近,也无法阻挡下一个冬天的来临……
2007-06-07 19:50
hejinjiang
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2007-5-15
收藏
得分:0 


<.不怕默默无闻,就怕碌碌无为.,}
2007-06-08 10:10
ㄣ黑銫禮ゞ菔
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-6
收藏
得分:0 
....表只顶!给个建议、哪错了、你的程序什么的……

冰雪再寒冷严冬再漫长,也无法阻挡春的回归。可我们都忘却了,春天再逼近,也无法阻挡下一个冬天的来临……
2007-06-10 14:11
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
To nuciewth:



I skimmed through your code and would like to make a few comments:

0. You have a faily good understanding of pointers in C/C++. In my opinion, all linked list is basically pointer-based.

1. You learn C because you want to advance to C++ eventually. Thus it might be a good habit to name your functions after some standard, say STL.

尾插法建立带头结点的单链表 --- the function is called push_back in STL list template;
头插法建立带头结点的单链表 --- the function is called push_front in STL list template.

2. If your post is to educate people, you may want to add some comments for the idea and the meaning of your variables. For example, your

pre

in

尾插法建立带头结点的单链表

actually points to the last node in the linked list, so it is good to rename it as "tail", "back", or "rear".

3. Time complexity and space complexity are missing. No one talks about an algorithm without telling these complexities.



I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-06-11 16:06
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

谢谢HJin的建议.

尽管是英文,我还是认真的把他们好好的看完,很庆幸你的英语可以使我明白.
我给出这些代码是因为有很多朋友问到,所以直接把这些写出来,当然没有用注释是我的错.因为我是根据我的思路就这么一路写下来,也就忘了要加注释,,下次有机会,我会做好的.
还有写变量的一些习惯,的确,我这方面也欠佳.希望以后能够改进吧.
希望以后C++进阶,把它做成模板.

再次谢谢你.


倚天照海花无数,流水高山心自知。
2007-06-11 22:24
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
哗!链表操作大全!

人生重要的不是所站的位置,而是所朝的方向
2007-06-14 00:29
快速回复:[原创]链表基本操作的程序实现.
数据加载中...
 
   



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

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