C语言顺序表插入操作,跪求赐教。。

我是想用C语言实现顺序表的插入操作,插入算法我基本应该修改的跟数据结构书上差不多了,但是在VC++里运行,就是会有错误,我不知道是不是函数里有问题,前面那个InitList没有问题,但是到插入的函数那,就出问题了,我也不知道是什么情况。。
还有顺带问个问题,这样用C语言实现顺序表是不是应该做一个输入函数?
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define FALSE 0
#define TRUE 1
#define OVERFLOW -1
#define OK 1
#define ERROR -1
typedef int Status;
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;

Status InitList(Sqlist &L){/*建立空表*/
L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)
return OVERFLOW;
else L.length=0;L.listsize=LIST_INIT_SIZE;
return OK;
}

ListInsert(Sqlist &L,int i,int e)/*在第i个之前插入*/
{if(!L.elem||i<1||i>L.length+1)
return ERROR;
int newbase;
if(L.listsize==L.length)
{
newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) return FALSE;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int *p,*q=&L.elem[i-1];
for(p=&(L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
L.length++;
return OK;
}

void main(){
Sqlist L;
int i,R;
int e=99,j=2;/*插入元素为e,插入次序2*/
InitList(L);
for(i=0;i<5;i++)
{scanf("%d", &L.elem[i]);/*我简单的用for循环输入了表的元素*/
L.length++;}
for(i=0;i<5;i++)
printf("%d", L.elem[i]);
ListInsert(L,j,e);
for(i=0;i<6;i++)
printf("%d", L.elem[i]);
}

修改后:
#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define FALSE 0
#define TRUE 1
#define OVERFLOW -1
#define OK 1
#define ERROR -1

typedef int Status;

typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;

Status InitList(Sqlist *L)
{/*建立空表*/
L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem)
return OVERFLOW;
else L->length=0;L->listsize=LIST_INIT_SIZE;
return OK;
}

ListInsert(Sqlist *L,int i,int e)/*在第i个之前插入*/
{
int newbase;
int *p,*q=&L->elem[i-1];

if(!L->elem||i<1||i>L->length+1)
return ERROR;
if(L->listsize==L->length)
{
newbase=(int*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) return FALSE;
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
for(p=&L->elem[L->length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
L->length++;
return OK;
}

void main(){
Sqlist L;
int i,R;
int e=99,j=2;/*插入元素为e,插入次序2*/
InitList(&L);
for(i=0;i<5;i++)
{
scanf("%d", &L.elem[i]);/*我简单的用for循环输入了表的元素*/
L.length++;
}
for(i=0;i<5;i++)
printf("%d", L.elem[i]);

printf("\n");
ListInsert(&L,j,e);
for(i=0;i<6;i++)
printf("%d", L.elem[i]);

scanf("%d", &L.elem[0]);/*我简单的用for循环输入了表的元素*/
}
温馨提示:答案为网友推荐,仅供参考
相似回答