首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【HELP】数据结构(基于c语言)线性表的插入有关问题

2012-03-26 
【HELP】数据结构(基于c语言)线性表的插入问题照书上敲的代码,怎么就插入不了呢,比如:输入长度:3;输入元素值

【HELP】数据结构(基于c语言)线性表的插入问题
照书上敲的代码,怎么就插入不了呢,比如:
输入长度: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  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");}


[解决办法]
C/C++ code
 if(i<1||i>L.length+1)    {       printf("要插入的位置不合法!\n");        return ERROR;    } 

热点排行