| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1181 人关注过本帖
标题:[求助]链表编程
只看楼主 加入收藏
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
 问题点数:0 回复次数:10 
[求助]链表编程

一、链表(每一功能用一函数实现)

1、 建立n个结点(结点数据域的值由键盘输入)构成的单链表。

2、 查找数据域值为x的结点,若找到,返回该结点的地址。

1、 在数据域值为x的结点之前插入一数据域值为y的结点,若表中无数据域值为x的结点,则将数据域值为y的结点插入表尾。

删除数据域值为x的结点,并返回成功与否的标志。
帮忙做一下吧!谢谢。。。。
搜索更多相关主题的帖子: 链表 
2007-07-03 18:27
love154139
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-5-6
收藏
得分:0 
功能说得不是很清楚....
麻烦说得有条理一点.......

2007-07-03 21:22
love154139
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-5-6
收藏
得分:0 

给你一个用C++写的吧...你说的全部功能都实现了......

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <conio.h>

struct node
{
int data;
node *next;
};

int n;
node *head;

void create(int n);
void research(int x);
void insert(int x,int y);
void del(int x);

void main()
{
int x,y;
cout<<"要建立多长的链表:"<<endl;
cin>>n;
cout<<"请输入"<<n<<"个数"<<endl;
create(n);

cout<<endl<<"请输入要查找的值:"<<endl;

cin>>x;
research(x);

cout<<endl<<"请输入要插入的数:"<<endl;
cin>>y;
insert(x,y);

cout<<endl<<"请输入要删除的数:"<<endl;
cin>>x;
del(x);
getch();

}

void create(int n)
{
node *p,*m;
int a;
for(int i=0;i<n;i++)
{
cin>>a;
p=new node;
p->data=a;
p->next=NULL;
if(i==0)
{
head=p;
m=p;
}
else
{
m->next=p;
m=m->next;
}
}

p=head;

while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}


void research(int x)
{
int sum=0;
node *p;
p=head;
while(p!=NULL)
{
if(p->data==x)
{
cout<<p->data<<"的地址值为:"<<p<<endl;
break;
}
else
{
p=p->next;
sum++;
}
}
if(sum==n)
cout<<"此链表中没有这个数"<<endl;
}


void insert(int x,int y)
{
int sum=0;
node *p,*q,*m;
m=new node;
m->data=y;
m->next=NULL;
p=head;
while(p!=NULL)
{
if(p->data==x&&p==head)
{
head=m;
m->next=p;
break;
}
else
{
if(p->data==x)
{
q->next=m;
m->next=p;
break;
}
else
{
q=p;
p=p->next;
sum++;
}

}
}

p=head;

if(sum==n)
{
while(p!=NULL)
{
q=p;
p=p->next;
}
q->next=m;
}

p=head;

while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}


void del(int x)
{
node *p,*q;
q=p=head;
while(p!=NULL)
{
if(p->data==x&&p==head)
head=p->next;
else
{
if(p->data==x)
{
q->next=p->next;
break;
}
else
{
q=p;
p=p->next;
}
}
}

p=head;
cout<<"删除"<<x<<"成功,下面输出删除"<<x<<"后的链表"<<endl;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}


[此贴子已经被作者于2007-7-3 22:57:09编辑过]


2007-07-03 22:50
love154139
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-5-6
收藏
得分:0 
希望对你有帮助吧.....

2007-07-03 23:04
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
得分:0 
这个是C语言课程设计!麻烦帮帮忙!
2007-07-04 13:00
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
得分:0 
回复:(love154139)给你一个用C++写的吧...你说的全...
用C语言的数组作!老师给的题目就这样!麻烦再看看!还有我发的其它两题!先谢啦!
2007-07-04 13:08
love154139
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-5-6
收藏
得分:0 

帮你换成C语言的了......

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct node
{
int data;
struct node *next;
};

int n;
struct node *head;

void create(int n);
void research(int x);
void insert(int x,int y);
void del(int x);

void main()
{
int x,y;
printf("要建立多长的链表:\n");
scanf("%d",&n);
printf("请输入%d个数\n",n);
create(n);

printf("\n请输入要查找的值:\n");;

scanf("%d",&x);
research(x);

printf("\n请输入要插入的数:\n");
scanf("%d",&y);
insert(x,y);

printf("\n请输入要删除的数:\n");
scanf("%d",&x);
del(x);
getch();

}

void create(int n)
{
struct node *p,*m;
int a,i;
for(i=0;i<n;i++)
{
scanf("%d",&a);
p=malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
if(i==0)
{
head=p;
m=p;
}
else
{
m->next=p;
m=m->next;
}
}

p=head;

while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}


void research(int x)
{
int sum=0;
struct node *p;
p=head;
while(p!=NULL)
{
if(p->data==x)
{
printf("%d的地址值为: %d\n",p->data,p);
break;
}
else
{
p=p->next;
sum++;
}
}
if(sum==n)
printf("此链表中没有这个数\n");
}


void insert(int x,int y)
{
int sum=0;
struct node *p,*q,*m;
m=malloc(sizeof(struct node));
m->data=y;
m->next=NULL;
p=head;
while(p!=NULL)
{
if(p->data==x&&p==head)
{
head=m;
m->next=p;
break;
}
else
{
if(p->data==x)
{
q->next=m;
m->next=p;
break;
}
else
{
q=p;
p=p->next;
sum++;
}

}
}

p=head;

if(sum==n)
{
while(p!=NULL)
{
q=p;
p=p->next;
}
q->next=m;
}

p=head;

while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}


void del(int x)
{
struct node *p,*q;
q=p=head;
while(p!=NULL)
{
if(p->data==x&&p==head)
{
head=p->next;
free(p);
}
else
{
if(p->data==x)
{
q->next=p->next;
free(p);
break;
}
else
{
q=p;
p=p->next;
}
}
}

p=head;
printf("删除%d成功,下面输出删除%d后的链表\n",x,x);
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}

[此贴子已经被作者于2007-7-4 18:00:00编辑过]



kdmBRr9t.txt (2.25 KB) [求助]链表编程


2007-07-04 13:44
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
得分:0 
谢拉!呵呵。。。
能帮我做做这道吗?求你啦?麻烦一下!

(一) 木桩问题

某农场有一个按编号次序排列的n根木桩构成的首位不相连接的围栏。现欲在这个围栏中选取一些木桩,按照原有的编号次序排列之后这些木桩的高度成为一个升序序列。所谓升序序列就是序列中的任何一个数都不小于它之前的任何一个数。试编写程序从这个围栏中选取合适的木桩使得选出的木桩个数t最大,并求出选取出t根木桩的方案的种数c

例如:围栏由高度分别为1019876346的木桩构成,则选出高度为1346的木桩是满足题意的选取方案。

输入:文件中的第一行只有一个数m,表明随后有m个问题的描述信息,每个问题的描述信息格式为n h1 h2 h3····hn。(其中hii=12,····n)表示第i根木桩的高度)。

输出:依次输出每个问题中tc的解。每行输出一个问题的解。

示例:

输入

3

9 10 1 9 8 7 6 3 4 6

3 100 70 102

6 40 37 23 89 91 12

输出

4 1

2 2

3 3

2007-07-04 23:42
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
得分:0 
回复:(love154139)帮你换成C语言的了......#includ...
太谢谢啦!!!你太强啦!
能帮我做做这个题吗?我实在不会!明天就交了!

(一) 木桩问题

某农场有一个按编号次序排列的n根木桩构成的首位不相连接的围栏。现欲在这个围栏中选取一些木桩,按照原有的编号次序排列之后这些木桩的高度成为一个升序序列。所谓升序序列就是序列中的任何一个数都不小于它之前的任何一个数。试编写程序从这个围栏中选取合适的木桩使得选出的木桩个数t最大,并求出选取出t根木桩的方案的种数c

例如:围栏由高度分别为1019876346的木桩构成,则选出高度为1346的木桩是满足题意的选取方案。

输入:文件中的第一行只有一个数m,表明随后有m个问题的描述信息,每个问题的描述信息格式为n h1 h2 h3····hn。(其中hii=12,····n)表示第i根木桩的高度)。

输出:依次输出每个问题中tc的解。每行输出一个问题的解。

示例:

输入

3

9 10 1 9 8 7 6 3 4 6

3 100 70 102

6 40 37 23 89 91 12

输出

4 1

2 2

3 3

2007-07-04 23:48
艾梦飞
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-3
收藏
得分:0 
回复:(love154139)帮你换成C语言的了......#includ...
帮帮吧!
2007-07-05 08:38
快速回复:[求助]链表编程
数据加载中...
 
   



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

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