注册 登录
编程论坛 数据结构与算法

【高手进来看下】一个小小的顺序表错误

C_snow 发布于 2010-12-04 14:57, 462 次点击
这是我建的一个顺序表
运行程序后出了点问题  怎么回事???

只有本站会员才能查看附件,请 登录



#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 100
typedef struct
{
 char name[20];
 char sex[10];
 int age;      
}elemtype;
elemtype List[MAXNUM];
int num=-1;
/*
typedef struct
{
 elemtype List[MAXNUM];
 int num;        
}listtype;
*/
int main()
{
 void Create(elemtype List[],int *num,int n);//建表   
 int Insert(elemtype List[],int *num,int i);//插入
 int Delete(elemtype List[],int *num,int i);//删除
 void Print(elemtype List[],int *num);//输出
 
 elemtype T;
 int n;
 int i,j;
 printf("Please input number:\n");
 scanf("%d",&n);
 Create(&T,&num,n);
 Print(&T,&num);
 
 printf("请输入你要插得位置\n");
 scanf("%d",&i);
 if(Insert(&T,&num,i))
    Print(&T,&num);
 printf("请输入你要删除的位置\n");
 scanf("%d",&j);
 if(Delete(&T,&num,j))
    Print(&T,&num);
 getchar();
 return 0;
}

void Create(elemtype List[],int *num,int n)
{
  if(n>MAXNUM-1||*num>MAXNUM-1)
  {
   printf("顺序表已满!\n");         
  }
  for(int i=0;i<n;i++)
  {
  printf("请输入姓名:\n");
  scanf("%s",&List[++*num].name);
  getchar();
  printf("请输入性别:\n");
  scanf("%s",&List[*num].sex);
  getchar();
  printf("请输入年龄:\n");
  scanf("%d",&List[*num].age);   
  getchar();
  printf("\n\n");
  }
}

void Print(elemtype List[],int *num)
{
 for(int i=0;i<=*num;i++)
 {
   printf("%s\n",List[i].name);   
   printf("%s\n",List[i].sex);  
   printf("%d\n",List[i].age);  
   printf("\n");
 }  
}

int Insert(elemtype List[],int *num,int i)
{
 elemtype x;
 int j;
 if(i<0||i>*num+1)
 {
  printf("i 值不合法\n");
  return 0;                 
 }   
 if(*num>MAXNUM-1)
 {
  printf("表满不能插入\n");
  return 0;                 
 }
 printf("输入你要新插入的表信息:\n");
 printf("请输入姓名:\n");
  scanf("%s",&x.name);
  getchar();
  printf("请输入性别:\n");
  scanf("%s",&x.sex);
  getchar();
  printf("请输入年龄:\n");
  scanf("%d",&x.age);   
  getchar();
  printf("\n\n");
 for(j=*num;j>=i;j--) List[j+1]=List[j];
 List[i]=x;
 (*num)++;
 return 1;
}


 int Delete(elemtype List[],int *num,int i)
 {
  int k;
  if(i<0||i>*num+1)
  {
  printf("i 值不合法\n");
  return 0;                 
  }
  for(k=i;k<*num;k++) List[k]=List[k+1];   
  (*num)--;
  return 1;
 }

2 回复
#2
寒风中的细雨2010-12-04 16:34
int main()
{
    void Create(elemtype List[],int *num,int n);//建表   
    int Insert(elemtype List[],int *num,int i);//插入
    int Delete(elemtype List[],int *num,int i);//删除
    void Print(elemtype List[],int *num);//输出

    //elemtype T;
    int n;
    int i,j;
    printf("Please input number:\n");
    scanf("%d",&n);
    Create(List,&num,n);
    Print(List,&num);

    printf("请输入你要插得位置\n");
    scanf("%d",&i);
    if(Insert(List,&num,i))
        Print(List,&num);
    printf("请输入你要删除的位置\n");
    scanf("%d",&j);
    if(Delete(List,&num,j))
        Print(List,&num);
    getchar();
    return 0;
}
#3
C_snow2010-12-05 00:59
谢谢斑竹的回答  明白了!
1