谢谢啊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编辑过]



											
	    

	