user-0 提问: 小白数据结构的求助

回复:
user: user-1
content: 供参考：//头文件 /*************************************************************     顺序表的实现  头文件 **************************************************************/  #include <stdio.h> #include <stdlib.h> //#include "Seqlist.h"  #define  MAXSIZE 100//最大长度  typedef int ElemType;  typedef  struct {   ElemType  *elem; //指向数据元素的起始地址   int  length;     //线性表的当前长度  }SqList;  //declaration of functions:  // 顺序表的初始化，即构造一个空的顺序表 void SL_Initiate(SqList &L);  // 释放顺序表 void SL_Free(SqList &L);  // 判断顺序表是否空 bool SL_IsEmpty(SqList L);  // 判断顺序表是否满 bool SL_IsFull(SqList L);  // 输入n个数据元素，创建一个顺序表L void SL_Create(SqList &L,int n);  // 输出整个顺序表 void SL_Print(SqList L);  // 获取顺序表L的第i个元素赋给e，i的有效范围[1,L.length]。 void SL_GetAt(SqList L, int i, ElemType &e);  // 在顺序表L中查找第一个值为x的元素， // 找到则返回该元素在表中的位置，否则返回0。 int SL_FindValue(SqList L, ElemType x);  // 在顺序表的第i个位置插入新元素e, 即在元素L.elem[i-1]之前插入 //i的有效范围[1,L.length+1] void SL_InsAt(SqList &L, int i, ElemType e);  // 删除顺序表L的第i个元素 //i的有效范围[1,L->length] void SL_DelAt(SqList &L, int i);  // 删除第一个值为x的元素 void SL_DelValue(SqList &L, ElemType x);    /*************************************************************     顺序表的实现之增删功能 实现文件     更新于2020年4月13日     **************************************************************/   void SL_Initiate(SqList &L) // 顺序表的初始化，即构造一个空的顺序表 {     L.elem = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE);     L.length=0; }  void SL_Free(SqList &L) // 释放顺序表 {     free(L.elem); }  bool SL_IsEmpty(SqList L) // 判断顺序表是否空 {     return L.length==0; }  bool SL_IsFull(SqList L) // 判断顺序表是否满 {     return L.length==MAXSIZE; }  void SL_Create(SqList &L,int n) // 输入n个数据元素，创建一个顺序表L {     int i;     L.length=n;     for(i=0; i<n; i++)        scanf("%d", &L.elem[i]); }  void SL_Print(SqList L) // 输出整个顺序表 {     if (L.length==0)     {        printf("The slist is empty.\n");        return ;     }      for (int i=0; i<L.length; i++)          printf("%d  ", L.elem[i]);     printf("\n"); }  void SL_InsAt(SqList &L, int i, ElemType e) // 在顺序表的第i个位置插入新元素e, 即在元素L.elem[i-1]之前插入 // i的有效范围[1,L.length+1] {     // 请在这里补充代码，完成本关任务     /********** Begin *********/     SqList *a;     a=&L;     if(i<0 || i>MAXSIZE) return;     int j,k=99;      for(j=L.length;j>i-1;j--)//for(j=MAXSIZE;j>i-1;j--)     {        a->elem[j]=a->elem[j-1];                              //k--;     }     a->elem[i-1]=e;      L.length ++;      /********** End **********/ }  void SL_DelAt(SqList &L, int i) // 删除顺序表L的第i个元素 //i的有效范围[1,L.length] {     // 请在这里补充代码，完成本关任务     /********** Begin *********/     SqList *a;     a=&L;     if(i<0 || i>MAXSIZE) return;     int k=i,j;     for(j=i-1;j<L.length;j++)  //for(j=i-1;j<99;j++)     {         a->elem[j]=a->elem[j+1];                                //k++;     }     L.length--;     /********** End **********/ }  void SL_DelValue(SqList &L, ElemType x) // 删除第一个值为x的元素 {     // 请在这里补充代码，完成本关任务     /********** Begin *********/     SqList *a=&L;     int i,j;     for(i=0;i<L.length;i++)//for(i=0;i<MAXSIZE;i++)     {         if(a->elem[i]==x)         {          for(j=i;j<L.length;j++) //for(j=i;j<99;j++)               a->elem[j]=a->elem[j+1];          L.length--;          return ;         }     }     return;      /********** End **********/ }  //主函数  //#include <stdio.h> //#include <stdlib.h> //#include "Seqlist.h" //#include "Seqlist.cpp"  int main() {     SqList L;     int n,i,x;      SL_Initiate(L);      printf("输入元素的个数及值\n");     scanf("%d", &n);//输入元素的个数     SL_Create(L, n);     SL_Print(L);      printf("输入待插入的位置和待插入元素的值\n");     scanf("%d%d", &i,&x);//输入待插入的位置和待插入元素的值     SL_InsAt(L, i, x);     SL_Print(L);      printf("输入待删除元素的位置\n");     scanf("%d", &i);//输入待删除元素的位置     SL_DelAt(L, i);     SL_Print(L);      printf("输入待删除元素的值");     scanf("%d", &x);//输入待删除元素的值     SL_DelValue(L, x);     SL_Print(L);      //SL_Print(L);     SL_Free(L);      return 0; }

user: user-0
content: 为什么小弟运行程序以后程序最后会多出一个0 当我输入这串数据它就多出一个0 6 5 9 11 31 9 88 2 10 7 9

user: user-0
content: 头文件 /*************************************************************     顺序表的实现  头文件 **************************************************************/  #define  MAXSIZE 100     //最大长度 typedef int ElemType;  typedef  struct {   ElemType  *elem;     //指向数据元素的起始地址   int  length;          //线性表的当前长度                                                        }SqList;  //declaration of functions:  // 顺序表的初始化，即构造一个空的顺序表 void SL_Initiate(SqList &L);  // 释放顺序表 void SL_Free(SqList &L);  // 判断顺序表是否空 bool SL_IsEmpty(SqList L);  // 判断顺序表是否满 bool SL_IsFull(SqList L);  // 输入n个数据元素，创建一个顺序表L void SL_Create(SqList &L,int n);  // 输出整个顺序表 void SL_Print(SqList L);  // 获取顺序表L的第i个元素赋给e，i的有效范围[1,L.length]。 void SL_GetAt(SqList L, int i, ElemType &e);  // 在顺序表L中查找第一个值为x的元素， // 找到则返回该元素在表中的位置，否则返回0。 int SL_FindValue(SqList L, ElemType x);  // 在顺序表的第i个位置插入新元素e, 即在元素L.elem[i-1]之前插入 //i的有效范围[1,L.length+1] void SL_InsAt(SqList &L, int i, ElemType e);  // 删除顺序表L的第i个元素 //i的有效范围[1,L->length] void SL_DelAt(SqList &L, int i);  // 删除第一个值为x的元素 void SL_DelValue(SqList &L, ElemType x);

user: user-0
content: 主函数  #include <stdio.h> #include <stdlib.h> #include "Seqlist.h" //#include "Seqlist.cpp"  int main() { 	SqList L;int n,i,x;  	SL_Initiate(L);  	scanf("%d", &n);//输入元素的个数 	SL_Create(L, n);  	scanf("%d%d", &i,&x);//输入待插入的位置和待插入元素的值 	SL_InsAt(L, i, x); 	 	scanf("%d", &i);//输入待删除元素的位置 	SL_DelAt(L, i);  	scanf("%d", &x);//输入待删除元素的值 	SL_DelValue(L, x);  	SL_Print(L);	 	SL_Free(L); }