2 qq 31347911 qq_31347911 于 2016.04.05 19:36 提问

(C语言版)数据结构线性表从键盘输入元素实现相关功能,不报错,但执行意外终止

#include
#include
#define MaxSize 50
typedef char ElemType;
typedef struct{//struct结构体
ElemType data[MaxSize];
int length;
}SqList;
void InitList(SqList &L)//初始化线性表的方法,&是取地址符号,是定义指针符号,如int *b=&a;*a=4
{
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length=0;//->是成员指示符,用来访问一个自定义数据类型的成员
}
void DestroyList(SqList *L)//摧毁线性表
{
free(L);
}
bool ListEmpty(SqList *L)//判断线性表是否为空
{
return (L->length==0);
}
int ListLength(SqList *L){//求线性表长度
return (L->length);
}
void DispList(SqList *L){//输出线性表
int i;
if(ListEmpty(L)) return;
for(i=0;ilength;i++)
printf("%c",L->data[i]);
printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值
{
if(iL->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e)//按元素值查找
{
int i=0;
while(ilength&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e){//插入数据元素的方法
int j;
if(iL->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素
{
int j;
if(iL->length)
return false;
i--;
e=L->data[i];
for(j=i;jlength-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void main(){
SqList *L;
ElemType e;
int n;
printf("顺序表的基本运算如下:\n");
printf("1.顺序表初始化\n");
printf("2.插入元素\n");
printf("3.求顺序表的长度\n");
printf("4.获取指定元素的位置\n");
printf("5.获取指定位置的元素\n");
printf("6.删除元素\n");
printf("7.输出顺序表的元素\n");
printf("请输入:\n");
scanf("%d",&n);
for(;1 if(n==1)
InitList(L);
else if(n==2){
printf("1.第一次插入;2.后续插入\n");
scanf("%d",&n);
if(n==1){
int m;
printf("请输入要插入的元素个数\n");
scanf("%d",&m);
L->length=m;
for(int i=1;i<=m;i++){
printf("请输入插入的第%d个元素的值:\n",i);
scanf("%c",&e);
ListInsert(L,i,e);}
}
else{
int m;
printf("请输入要插入的元素位置\n");
scanf("%d",&m);
printf("请输入插入的元素的值:\n");
scanf("%c",&e);
ListInsert(L,m,e);
}

}
else if(n==3)
    printf("顺序表的长度=%d\n",ListLength(L));
else if(n==4){
    printf("请输入要查找的元素值:\n");
    scanf("%c",&e);
    printf("元素%c的位置=%d\n",e,LocateElem(L,e));}
else if(n==5){
    printf("请输入元素序号:\n");
    int m;
    scanf("%d",&m);
    GetElem(L,m,e);
    printf("第%d个元素=%c",m,e);
}
else if(n==6){
    printf("请输入元素的序号:\n");
    int m;
    scanf("%d",&m);
    ListDelete(L,m,e);}
else
{
    DispList(L);}


}

}

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.05 20:30

感觉问题好多啊 。。稍微改了一下,楼主跑一下试试

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef char ElemType; 
typedef struct{//struct结构体
    ElemType data[MaxSize];
    int length;
}SqList;
void InitList(SqList *&L)//初始化线性表的方法,&是取地址符号,是定义指针符号,如int *b=&a;*a=4 
{
    L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
    L->length=0;//->是成员指示符,用来访问一个自定义数据类型的成员
}
void DestroyList(SqList *L)//摧毁线性表
{
    free(L);
}
bool ListEmpty(SqList *L)//判断线性表是否为空
{
    return (L->length==0);
}
int ListLength(SqList *L){//求线性表长度
    return (L->length);
}
void DispList(SqList *L){//输出线性表
    int i;
    if(ListEmpty(L)) return;
    for(i=0;i<L->length;i++)
        printf("%c",L->data[i]);
    printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值
{
    if(i > L->length)
        return false;
    e=L->data[i-1];
    return true;
}
int LocateElem(SqList *L,ElemType e)//按元素值查找
{
    int i=0;
    while(i<L->length&&L->data[i]!=e)
        i++;
    if(i>=L->length)
        return 0;
    else
        return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e){//插入数据元素的方法
    int j;
    if(i>L->length+1)
        return false;
    i--;
    for(j=L->length;j>i;j--)
        L->data[j]=L->data[j-1];
    L->data[i]=e;
    L->length++;
    return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素
{
    int j;
    if(i>L->length)
        return false;
    i--;
    e=L->data[i];
    for(j=i;j<L->length-1;j++)
        L->data[j]=L->data[j+1];
    L->length--;
    return true;
}
void main(){
    SqList *L = NULL;
    ElemType e;
    int n;
    while(1)
    {
        printf("顺序表的基本运算如下:\n");
        printf("1.顺序表初始化\n");
        printf("2.插入元素\n");
        printf("3.求顺序表的长度\n");
        printf("4.获取指定元素的位置\n");
        printf("5.获取指定位置的元素\n");
        printf("6.删除元素\n");
        printf("7.输出顺序表的元素\n");
        printf("请输入:\n");
        scanf("%d",&n); 
        if(n==1)
            InitList(L);
        else if(n==2){
            printf("1.第一次插入;2.后续插入\n");
            scanf("%d",&n);
            if(n==1){
                int m;
                printf("请输入要插入的元素个数\n");
                scanf("%d",&m);
                for(int i=1;i<=m;i++){
                    printf("请输入插入的第%d个元素的值:\n",i);
                    fflush(stdin);
                    scanf("%c",&e);
                    ListInsert(L,i,e);
                    L->length=i;
                }
            }
            else{
                int m;
                printf("请输入要插入的元素位置\n");
                scanf("%d",&m);
                printf("请输入插入的元素的值:\n");
                scanf("%c",&e);
                ListInsert(L,m,e);
            }
        }
        else if(n==3)
            printf("顺序表的长度=%d\n",ListLength(L));
        else if(n==4){
            printf("请输入要查找的元素值:\n");
            scanf("%c",&e);
            printf("元素%c的位置=%d\n",e,LocateElem(L,e));}
        else if(n==5){
            printf("请输入元素序号:\n");
            int m;
            scanf("%d",&m);
            GetElem(L,m,e);
            printf("第%d个元素=%c",m,e);
        }
        else if(n==6){
            printf("请输入元素的序号:\n");
            int m;
            scanf("%d",&m);
            ListDelete(L,m,e);}
        else
        {
            DispList(L);
        }
    }

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!