【HELP】数据结构(基于c语言)线性表的插入问题
照书上敲的代码,怎么就插入不了呢,比如:
输入长度:3;
输入元素值:1 2 3;
输入要插入的值:4;
输入要插入的位置:4;
最后的线性表应该是:1 2 3 4 而实际上还是 1 2 3
怎么回事呢?请指教~~
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;//定义了顺序表数据类型/*初始化顺序表*/int SqList_Init(SqList &L){L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem) exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}/*建立顺序表*/int SqList_Create(SqList &L){int i;printf("请输入各个元素的值:");for(i=0;i<L.length;i++)scanf("%d",&L.elem[i]);return OK;}/*插入值到顺序表*/int SqList_Insert(SqList &L, int i, int e){ int *newbase,*q,*p; if(i<1||i>L.length+1) printf("要插入的位置不合法!\n"); return ERROR; if(L.length>=L.listsize){ //空间已满,增加分配 newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; }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(){int i,e,n;SqList L;SqList_Init(L);printf("\n输入长度:");scanf("%d",&n);L.length=n;SqList_Create(L);printf("输入插入的数据:");scanf("%d",&e);printf("输入插入的位置:");scanf("%d",&i);if(SqList_Insert(L,i,e)){printf("插入后的顺序表:");for(i=0;i<L.length;i++)printf("%d ",L.elem[i]); }else printf("数据插入失败!\n");}
if(i<1||i>L.length+1) { printf("要插入的位置不合法!\n"); return ERROR; }