一、链表(每一功能用一函数实现)
1、 建立n个结点(结点数据域的值由键盘输入)构成的单链表。
2、 查找数据域值为x的结点,若找到,返回该结点的地址。
1、 在数据域值为x的结点之前插入一数据域值为y的结点,若表中无数据域值为x的结点,则将数据域值为y的结点插入表尾。
删除数据域值为x的结点,并返回成功与否的标志。帮忙做一下吧!谢谢。。。。
给你一个用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编辑过]
帮你换成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编辑过]
(一) 木桩问题
某农场有一个按编号次序排列的n根木桩构成的首位不相连接的围栏。现欲在这个围栏中选取一些木桩,按照原有的编号次序排列之后这些木桩的高度成为一个升序序列。所谓升序序列就是序列中的任何一个数都不小于它之前的任何一个数。试编写程序从这个围栏中选取合适的木桩使得选出的木桩个数t最大,并求出选取出t根木桩的方案的种数c。
例如:围栏由高度分别为10,1,9,8,7,6,3,4,6的木桩构成,则选出高度为1,3,4,6的木桩是满足题意的选取方案。
输入:文件中的第一行只有一个数m,表明随后有m个问题的描述信息,每个问题的描述信息格式为n h1 h2 h3····hn。(其中hi(i=1,2,····n)表示第i根木桩的高度)。
输出:依次输出每个问题中t和c的解。每行输出一个问题的解。
示例:
输入
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
(一) 木桩问题
某农场有一个按编号次序排列的n根木桩构成的首位不相连接的围栏。现欲在这个围栏中选取一些木桩,按照原有的编号次序排列之后这些木桩的高度成为一个升序序列。所谓升序序列就是序列中的任何一个数都不小于它之前的任何一个数。试编写程序从这个围栏中选取合适的木桩使得选出的木桩个数t最大,并求出选取出t根木桩的方案的种数c。
例如:围栏由高度分别为10,1,9,8,7,6,3,4,6的木桩构成,则选出高度为1,3,4,6的木桩是满足题意的选取方案。
输入:文件中的第一行只有一个数m,表明随后有m个问题的描述信息,每个问题的描述信息格式为n h1 h2 h3····hn。(其中hi(i=1,2,····n)表示第i根木桩的高度)。
输出:依次输出每个问题中t和c的解。每行输出一个问题的解。
示例:
输入
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