【HELP】数据结构(基于c语言)线性表的插入有关问题
【HELP】数据结构(基于c语言)线性表的插入问题
照书上敲的代码,怎么就插入不了呢,比如:
输入长度:3;
输入元素值:1 2 3;
输入要插入的值:4;
输入要插入的位置:4;
最后的线性表应该是:1 2 3 4 而实际上还是 1 2 3
怎么回事呢?请指教~~
------解决方案--------------------
照书上敲的代码,怎么就插入不了呢,比如:
输入长度:3;
输入元素值:1 2 3;
输入要插入的值:4;
输入要插入的位置:4;
最后的线性表应该是:1 2 3 4 而实际上还是 1 2 3
怎么回事呢?请指教~~
- C/C++ code
#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 10 typedef 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"); }
------解决方案--------------------
- C/C++ code
if(i<1||i>L.length+1) { printf("要插入的位置不合法!\n"); return ERROR; }