-征- 2016-04-05 11:36 采纳率: 0%
浏览 1991

(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条回答

  • 小灸舞 2016-04-05 12: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);
            }
        }
    
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘