刚学数据结构,写了个顺序表,调试无误,但没法执行,求各位指点。。
头疼,对着课本一个个看好久都不行,一运行就显示“已停止”,求大神指点啊- -头疼。。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
# define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
# define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef int Status;
typedef int ElemType; //定义ElemType类型为int
typedef struct { //若后面不再用,可省略结构名
ElemType *elem; //存储空间基址
int length; //当前表长(特指元素个数)
int listsize; //当前分配的存储容量
}SqList;
Status InitList(SqList *L)
{ //构造一个空的线性表L。
L->elem = (ElemType *)malloc ( LIST_INIT_SIZE * sizeof (ElemType));
if ( ! L->elem )
exit ( OVERFLOW ) ; // 存储分配失败
L->length = 0; // 空表长度为0
L->listsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
} // InitList_Sq
void ShowList(SqList *L)
{
int i;
printf("顺序表为:");
for(i=0;i<L->length;i++)
{printf("%d,",L->elem[i]);}
printf("\n");
}
int GetLength(SqList *L)
{
return (L->length);
}
Status ListInsert(SqList *L,int i ,ElemType e){//在第i个位置前插入元素e
int *p,*q,*newbase;
if(i<1 || i>L->length+1) return ERROR; //i值不合法
if (L->length>=L->listsize)//当前存储空间已满,增加分配
{
newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if (!newbase) exit(OVERFLOW); //存储分配失败
L->elem=newbase; //新基址
L->listsize+=LISTINCREMENT; //增加存储容量
}
q=&(L->elem[i-1]); //q为插入位置
for (p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p; //插入位置之后的元素右移
*q=e; //插入e
++L->length; //表长增1
return OK;
} //ListInsert_Sq
Status ListDelete(SqList *L,int i,ElemType *e)
{
int *p,*q;
if (i<1||i>L->length)
return ERROR; //i值不合法
p=&(L->elem[i-1]); //p为被删除元素的位置
e=*p; //被删除元素的值赋给e
q=L->elem+L->length-1; //表尾元素的位置
for(++p;p<=q;++p)
*(p-1)=*p; //被删除元素之后的元素左移
--L->length; //表长减1
return OK;
}//ListDelete_Sq
void ClearList(SqList *L)
{
L->length=0; //将线性表的长度置为0
}
int main()
{ SqList *La;
InitList(&La);
int n;
int j;
printf("请输入顺序表的长度:\n");
scanf("%d",&n);
La->length=n;
printf("请按递增顺序输入La的值:\n");
for(j=0;j<n;j++)
{scanf("%d",&La->elem[j]);}
ShowList(La);//展示顺序表
GetLength(La);//顺序表的长度
printf("顺序表的长度为:%d",La->length);
int i,e;//顺序表的插入
printf("请输入要在前插入元素下标i的值:\n");
scanf("%d",&i);
printf("请输入插入元素e的值:\n");
scanf("%d",&e);
ListInsert(La,i,e);
ShowList(La);
int k,f;//顺序表元素的删除
printf("请输入要删除元素下标的值:\n");
scanf("%d",&k);
ListDelete(&La,k,f);
printf("删除的元素为:%d",f);
ShowList(La);
return 0;
}