我是想用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]);
}