| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1819 人关注过本帖
标题:[求助] 链表操作:对数据的添加,查询,删除。(每次操作完后显示所有数据 ...
只看楼主 加入收藏
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
 问题点数:0 回复次数:15 
[求助] 链表操作:对数据的添加,查询,删除。(每次操作完后显示所有数据)有经验
链表操作:对数据的添加,查询,删除。(每次操作完后显示所有数据)有经验的可以简单谈谈

我考虑了一天一夜,还没头绪。目前程序的编写还不太成熟,上不了桌面。呵呵 ̄ ̄ 

最迟明天中午,我将我的呈上...
 
诸位好兄弟,把你们对链表的体会写一下,我感到有点茫然阿。


明天中午见了 
搜索更多相关主题的帖子: 链表 数据 经验 删除 
2006-11-02 17:30
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

如果你学过数据结构写起来应该不难的

1.先把链表的结构写出来
typedef struct node
{int data;
struct node *next;
}*Lnode;

2.建立链表
//比如想储存成这样 1->2->3->4->NULL
Lnode head,p,q;
head->next=NULL;
p=head;
{for(int i=1;i<5;i++)
q=(Lnode)malloc(sizeof(struct node));//分配空间嘛
q->data=i;
q->next=p->next
p->next=q;
p=q;
}

3.输出链表
p=head;
while(p!=NULL)
{printf("%d->",p->data);
p=p->next;
}
printf("NULL\n");

4.查找
int num;
scanf("%d",&num);
p=head;
while(p!=NULL)
{if(p->data==num)
printf("查抄成功");
p=p->next;
}
printf("查找失败");

5.删除元素
scanf("%d",&num);
p=head;
if(num==p->data)
{head->next=p->next;
free(p);}
else{
while(p!=NULL)
{if(num==p->next->data)//找到
p->next=p->next->next;//删除
p=p->next;
}
}

//只是简单的形容了一下 你分析下就自己好好写一个吧


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-11-02 18:49
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
看看这个,有很多毛病
请多多发表意见
#include<stdio.h>
#define TYPE struct stu
#define LEN sizeof (struct stu)
struct stu
{
int num;
int age;
struct stu *next;
};
creat(int n)
{
struct stu *head,*pf,*pb;
int i;
for(i=0;i<n;i++)
{
pb=(TYPE*) malloc(LEN);
printf("input Number and Age\n");
scanf("%d %d",&pb->num,&pb->age);
if(i==0)
pf=head=pb;
else pf->next=pb;
pb->next=NULL;
pf=pb;
}

pf=head;
for(i=0;i<3;i++)
{
printf("Number=%d\nage=%d\n",pf->num,pf->age);
pf=pf->next;
}
free(head);
}
int main(void)
{
int m=3;
creat(m);
pri();
}
void pri(){
int num;
printf("please select your choice:");
printf("1--------------search\n");
printf("2--------------insert\n");
printf("3--------------delete\n");
scanf("%d",&num);

switch(num)
case 1:
TYPE * search(TYPE *head,int num);
break;
case 2:
TYPE * insert(TYPE * head,TYPE *pi);
break;
case 3:
TYPE * delete(TYPE * head,int num);
break;
return 0;
}
TYPE * search(TYPE *head,int num)
{
TYPE *p;
int i;
p=head;
while(p->num!=num&&p->next!=NULL)
p=p->next;
if(p->num==num) return(p);
if(p->num!=num&&p->next==null)
printf("Node %d has not been found!\n",num);
}
TYPE * delete(TYPE * head,int num)
{
TYPE *pf,*pb;
if(head==NULL)
{printf("\n empty list!\n");
goto end;}
pb=head;
while(pb->num!=num&&pb->next!=null)
{
pf=pb;
pb=pb->next;
}

if(pb->num==num)
{
if(pb==head)
head=pb->next;
else
pf->next=pb->next;
free(pb);
printf("The node is deleted\n");
}
else
printf("The node not been found!\n");
end:
return head;
}
TYPE * insert(TYPE * head,TYPE *pi)
{
TYPE *pf,*pb;
pb=head;
if(head==NULL)
{
head=pi;
pi->next=NULL;}
else
{
while((pi->num>pb->num)&&(pb->next!=NULL))
{
pf=pb;
pb=pb->next;
}
if(pi->num<=pb->num)
{
if(head==pb)
{pi->next=head;
head=pi;
}
else
{
pi->next=pf->next;
pf->next=pi;
}
}
else
{
pb->next=pi;
pi->next=NULL;}
}
return head;}



2006-11-03 09:43
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用unicorn在2006-11-2 18:49:16的发言:

如果你学过数据结构写起来应该不难的

1.先把链表的结构写出来
typedef struct node
{int data;
struct node *next;
}*Lnode;

2.建立链表
//比如想储存成这样 1->2->3->4->NULL
Lnode head,p,q;
head->next=NULL;
p=head;
{for(int i=1;i<5;i++)
q=(Lnode)malloc(sizeof(struct node));//分配空间嘛
q->data=i;
q->next=p->next
p->next=q;
p=q;
}

3.输出链表
p=head;
while(p!=NULL)
{printf("%d->",p->data);
p=p->next;
}
printf("NULL\n");

4.查找
int num;
int flag=0;
scanf("%d",&num);
p=head;
while(p!=NULL)
{if(p->data==num)
{

printf("查抄成功");//可以跳出,并且设置一标记,表示已经查找到了.该标记作为后面输出查找失败的条件
p=p->next;
flag++; //该标记即可做为查找成功的标记,也可以表示查找成功的个数(把break去掉).
break;
}
if(flag==0)
{
printf("查找失败");
}

5.删除元素
scanf("%d",&num);
p=head;
if(num==p->data)
{head->next=p->next;
free(p);}
else{
while(p!=NULL)
{if(num==p->next->data)//找到
p->next=p->next->next;//删除,也应该释放该结点
p=p->next;
}
}

//只是简单的形容了一下 你分析下就自己好好写一个吧

scanf("%d",&num);
node *pre,*p;
pre=NULL;
p=head;
while(p!=NULL)
{
if(p->info==num&&pre==NULL)//处理头结点
{

head=head->next;
free(p);
p=head;
}
else
if(p->info==num) //处理中间结点
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=pre->next;
}
}
return(head);



倚天照海花无数,流水高山心自知。
2006-11-03 10:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
楼主应该在建立链表时把建立的链表返回给主函数,要不然怎么对以后的链表进行操作.
建立链表也不应该将结点个数固定,直接用一个关键值不可能达到的值作为结束条件,这样才有动态分配的感觉.
void pri()没有声明.

倚天照海花无数,流水高山心自知。
2006-11-03 10:44
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
怎么作呢 ?不甚了解。

2006-11-03 11:13
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 

去图书管借个数据结构与算法,交了作业再说吧。呵呵!


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-11-03 11:15
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
你真幽默阿**:::::这辈子不想再看见你黑瞎。

2006-11-03 11:38
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
无语,别这么说。我很郁闷的。我这学期有数据结构这个课,我到现在自己也没办法写出来。我都觉得可耻了。

T。T

今天上课的时候老师说要实训的,这几天准备把前面的线性和树性的先写个过~嘿嘿。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-11-03 11:40
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
nuciewth 建议的很好
链表就应该灵活使用才能体现出它的优势的
你写的已经蛮有规模的了,不错哦,再认真理解数据结构中链表的相关内容,来完善你的程序吧

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-11-03 12:29
快速回复:[求助] 链表操作:对数据的添加,查询,删除。(每次操作完后显示所有 ...
数据加载中...
 
   



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

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