注册 登录
编程论坛 数据结构与算法

关于顺序表插入的问题

拔D无情 发布于 2016-03-20 18:10, 3052 次点击
我编写了下面的程序,想建立一个顺序表,并且在i位置前插入元素e,i和e全由键盘输入,并输出插入后的顺序表及表长。
但是程序虽然能运行,结果却有问题,例如我创建表长5的顺序表11 33 44 55 66,然后想在位置2前插入22,但结果却是11 400 33 44 55 66
请问哪里出错了,希望大神斧正!!
#include<stdio.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTCREMENT 10
#define OK 1
#define OWERFLOW -2
typedef int ElemType;
typedef struct{
    ElemType *elem;
    int length;
    int listsize;
}Sqlist;
void InitList(Sqlist&L)
{
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem) printf("overflow");
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
}
void CreateList(Sqlist&L)
{
    int i;
    printf("请输入线性表元素的个数\n");
    scanf("%d",&L.length);
    printf("请输入元素\n");
    for(i=1;i<=L.length;i++)
    {
        scanf("%d",&L.elem[i-1]);
    }
    printf("线性表的长度为:%d\n线性表的元素为:",L.length);
    for(i=1;i<=L.length;i++)
    {
        printf("%d ",L.elem[i-1]);
    }
    printf("\n");
}
void Print(Sqlist &L)
{
    int i;
    for(i=0;i<L.length;i++)
        printf("%d ",*(L.elem+i));
    printf("\n长度为:%d\n\n",L.length);
}
void ListInsert(Sqlist&L)
{
    int i,e;
    printf("请输入i和e的值:\n");
    scanf("%d,%d",&i,&e);
    if(i<1||i>L.length+1)
    printf("插入位置不存在");
    if(L.length>=L.listsize){
        ElemType *newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTCREMENT)*sizeof(ElemType));
        if(!newbase)
        printf("overflow");
        L.elem=newbase;
        L.listsize+=LISTCREMENT;
    }
    int j;
    for(j=L.length;j>=i;j--)
            L.elem[j]=L.elem[j-1];
        L.elem[i-1]=e;
        ++L.length;
}
int main(){
    Sqlist L;
    InitList(L);
    CreateList(L);
    ListInsert(L);
    Print(L);
}
2 回复
#2
jklqwe1112016-03-20 19:32
没有看到明显错误,下面这句可能会有些问题,scanf("%d,%d",&i,&e);在输入时要按如下形式2,22中间要有豆号,否则结果不正确,一般的都使用下面形式scanf("%d%d",&i,&e);这样可以使用空格,回车,TAB键分隔数据。
#3
拔D无情2016-03-20 20:59
回复 2楼 jklqwe111
谢谢,我发现了是在运行的时候使用的中文输入法,结果导致逗号所占字节出的问题
1