谢谢啊1!好像没结果哦~~
我还有一题数据结构的课程设计,
没错误,可总是没结果啊~~
实现的也功能是
1. 建立链表,链表的每个结点必须包含三个字符(或字符串)类型的域,四个数值类型的域(其中最后一个数值域表示另外前三个数值域的总和)和一个指针域。
2. 输出链表中的所有结点(以表的形式)。
3. 计算链表中每个结点的最后一个数值域。
4. 在链表中插入若干个结点,是否继续插入依据输入的是“Y”还是“N”,回答“Y”则继续插入。
5. 在链表中删除若干个结点,是否继续删除依据输入的是“Y”还是“N”,回答“Y”则继续删除。
6. 统计链表中结点的个数。
7. 把链表中的结点转换成数组存放。
8. 对数组按数值型域进行排序(升序)。
9. 对数组查找给定的关键字值(要求用顺序查找和折半查找,其中折半查找对排序后的数组进行查找)。
建议用菜单组织以上各种操作。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
可总死的,只要输入,没有输出。帮我看
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <malloc.h>
#define N 100
typedef struct node
{ char c1[50];
int i1,i2,i3,i4;
struct node *next;
}lnode,*linklist;
linklist creat_linklist() //头查法创建单链表 1
{ linklist L=NULL;
lnode *s;
char c4[50],c5[20]="end";
cout<<"请输入一个字符串(输入'end'结束)"<<endl;
gets(c4);
while(strcmp(c4,c5)!=0)
{ if((s=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return NULL;}
strcpy(s->c1,c4);
// cout<<"请输入两个字符串"<<endl;
// cin>>s->c2>>s->c3;
cout<<"请输入三个整形数"<<endl;
cin>>s->i1>>s->i2>>s->i3;
s->i4=s->i1+s->i2+s->i3;
s->next=L;L=s;
cout<<"请输入一个字符串(输入'end'结束)"<<endl;
gets(c4);
}
return L;
}
void print(linklist L) //输出链表 2
{ while(L->next!=NULL)
{ cout<<"姓名 语文 数学 英语 总成绩"<<endl;
cout<<L->c1 <<L->i1 << L->i2 << L->i3 << L->i4<<endl;
cout<<"->"<<endl;
L=L->next;}
cout<<"姓名 语文 数学 英语 总成绩"<<endl;
cout<<L->c1 <<L->i1<<L->i2 <<L->i3<< L->i4<<endl;
}
int length_linklist(linklist L) //求表长 3
{ lnode *p=L;
int j;
if(p==NULL) return 0;
j=1;
while(p->next!=NULL)
{p=p->next;j++;}
return j;
}
lnode *charlocate_linklist(linklist L) //按值查找中,查找字符串
{ char x1[20];
lnode *p;
if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return NULL;}
cout<<"请输入要查找的学生姓名:"<<endl;
gets(x1);
p=L;
while((p!=NULL)&&(strcmp(p->c1,x1)!=0))
p=p->next;
return p;
}
//lnode *intlocat_linklist(linklist l,int x) //按值查找中,查找数字
//{ lnode *p;
// if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
// {cout<<"不能分配内存空间!"<<endl;
// return NULL;}
// p=l;
// while((p!=NULL)&&(p->i1!=x)&&(p->i2!=x)&&(p->i3!=x)&&(p->i4!=x))
// p=p->next;
// return p;
//}
//lnode *locate_linklist(linklist l) //按值查找
//{ cout<<"1.查找字符串"<<endl;
// cout<<"2.查找数字"<<endl;
// int x;
// cin>>x;
// switch(x)
// { case 1:cout<<"请输入要查找的字符串:"<<endl;
// char x1[20];gets(x1);return charlocate_linklist(l,x1);break;
// case 2:cout<<"请输入要查找的数字:"<<endl;
// int x2;cin>>x2;return intlocat_linklist(l,x2);break;
// default: return NULL;break;
//}
//}
linklist insert_linklist(linklist L) //按值查找插入操作 4
{ int x;
lnode *p,*q,*h;
cout<<"请问要在哪个元素的前面(或后面)插(学生姓名):"<<endl;
p=charlocate_linklist(L);
if(p==NULL)
{cout<<"该元素不存在!"<<endl;cout<<"插入失败!"<<endl;return L;}
else{if((h=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return L;}
cout<<"请输入要插入的元素的值"<<endl;
cout<<"请输入学生姓名"<<endl;
cin>>h->c1;
cout<<"请输入三科成绩"<<endl;
cin>>h->i1>>h->i2>>h->i3;
h->i4=h->i1+h->i2+h->i3;
cout<<"请问是要在之前查找到的元素的前面插入还是后面插入,前插请选1,后插请选2:"<<endl;
cin>>x;
switch(x)
{case 1:if((q=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return L;break;}
if(p==L)
{h->next=p;L=h;cout<<"插入成功!"<<endl;return L;break;}
else
{for(q=L;q->next!=p;q=q->next);
h->next=q->next;q->next=h;cout<<"前插成功!"<<endl;return L;break;}
case 2:h->next=p->next;p->next=h;cout<<"后插成功!";return L;break;
default:return L; break;}
}
}
linklist del_linklist(linklist L) //按值查找删除操作 5
{ lnode *p,*q;
cout<<"请输入要删除哪个学生记录:"<<endl;
p=charlocate_linklist(L);
if(p==NULL)
{cout<<"该元素不存在!"<<endl;cout<<"删除失败!"<<endl;return L;}
else{if(p==L)
{L=L->next;cout<<"删除成功!"<<endl;return L;}
else {if((q=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return L;}
else {for(q=L;q->next!=p;q=q->next)
q->next=p->next;
cout<<"删除成功!"<<endl;
return L;}
}
}
}
void display_i4(linklist L) //链表中每个结点的最后一个数值域 6
{ while(L->next!=NULL)
{cout<<L->i4<<endl;
L=L->next;}
cout<<L->i4<<endl;
}
int is_search(linklist L) //数字的顺序查找 7
{ lnode *p;
int kx,r[N],i=0,j;
cout<<"请输入您要查找的数字:"<<endl;
cin>>kx;
r[0]=kx;
if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return NULL;}
p=L;
while(p!=NULL)
{r[4*i+1]=p->i1;
r[4*i+2]=p->i2;
r[4*i+3]=p->i3;
r[4*i+4]=p->i4;
p=p->next;
i++;}
for(j=4*i;r[j]!=kx;j--);
for(int z=0;z<=4*i;z++)
cout<<r[z]<<endl;
cout<<"该元素的位置为:"<<endl;
return j;
}
int cs_search(linklist L) //字符串的顺序查找 7
{ lnode *p;
char kx[20],r[N][N];
int i=1,j;
cout<<"请输入您要查找的字符串:"<<endl;
gets(kx);
strcpy(r[0],kx);
if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;
return NULL;}
p=L;
while(p!=NULL)
{strcpy(r[i],p->c1);
//strcpy(r[3*i+2],p->c2);
//strcpy(r[3*i+3],p->c3);
p=p->next;
i++;}
for(j=i-1;strcmp(r[j],kx)!=0;j--);
for(int z=0;z<=3*i;z++)
cout<<r[z]<<endl;
cout<<"该元素的位置为:"<<endl;
return j;
}
int s_search(linklist l) //顺序查找的选择 7
{ cout<<"1.查找字符串"<<endl;
cout<<"2.查找数字"<<endl;
int x;
cin>>x;
switch(x)
{ case 1:return cs_search(l);break;
case 2:return is_search(l);break;
default: return NULL;break;
}
}
void bublesort(linklist L) //冒泡排序法升序排序 8
{ lnode *p;
int r[N],i=1,temp;
if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
{cout<<"不能分配内存空间!"<<endl;}
else {p=L;
while(p!=NULL)
{//r[4*i+0]=p->i1;
//r[4*i+1]=p->i2;
//r[4*i+2]=p->i3;
r[i]=p->i4;
p=p->next;
i++;}
for(int x=i-2;x>0;x--)
for(int y=0;y<i-2;y++)
if(r[y+1]<r[y])
{temp=r[y+1];
r[y+1]=r[y];
r[y]=temp;}
cout<<"排序后的数组为:"<<endl;
for(int z=0;z<i-1;z++)
cout<<r[z]<<endl;}
}
int binary_search(linklist L) //有序表的折半查找 9
{ //lnode *p;
int i=1;
char r[N];
void bublesort(linklist L);
//if((p=(lnode *)malloc(sizeof(lnode)))==NULL)
// {cout<<"不能分配内存空间!"<<endl;
// return NULL;}
// p=L;
// while(p!=NULL)
// {//r[4*i+1]=p->i1;
// //r[4*i+2]=p->i2;
// //r[4*i+3]=p->i3;
// r[i]=p->c1;
// p=p->next;
// i++;}
// for(int x=i-2;x>0;x--)
// for(int y=1;y<i-1;y++)
// if(r[y+1]<r[y])
// {temp=r[y+1];
// r[y+1]=r[y];
// r[y]=temp;}
int low=1,mid,high=4*i,flag=0,kx;
cout<<"请输入要查找的数字:"<<endl;
cin>>kx;
while(low<=high)
{ mid=(low+high)/2;
if(kx<r[mid]) high=mid-1;
else if(kx>r[mid]) low=mid+1;
else {flag=mid;break;}
}
cout<<"该元素在数组中的位置为:"<<endl;
return flag;
}
void main()
{ linklist a;
int z;
char s;
do
{cout<<"1.头查法创建单链表"<<endl;
cout<<"2.打印链表"<<endl;
cout<<"3.求表长"<<endl;
cout<<"4.插入操作"<<endl;
cout<<"5.删除操作"<<endl;
cout<<"6.链表中每个结点的最后一个数值域"<<endl;
cout<<"7.顺序查找"<<endl;
cout<<"8.对数组按数值型域进行升序排序"<<endl;
cout<<"9.对有序表进行折半查找"<<endl;
cout<<"0.退出"<<endl;
cin>>z;
switch(z)
{case 1:a=creat_linklist();break;
case 2:a=creat_linklist();break; print(a);break;
case 3:cout<<length_linklist(a)<<endl;break;
case 4:do {a=insert_linklist(a);cout<<"是否继续插入元素?(Y/N)"<<endl;
cin>>s;}while(s=='Y');break;
case 5:do {a=del_linklist(a);cout<<"是否继续删除元素?(Y/N)"<<endl;
cin>>s;}while(s=='Y');break;
case 6:display_i4(a);break;
case 7:cout<<s_search(a)<<endl;break;
case 8:bublesort(a);break;
case 9:cout<<binary_search(a)<<endl;break;
default: break;}
}while(z);
}
[此贴子已经被作者于2006-1-11 18:25:36编辑过]