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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[自学《数据结构(C语言版)》] C中顺序线性表的实现(一)
线性表是最常用且最简单的一种数据结构。它是n个数据元素的有限序列。 线性表的顺序储存结构称为顺序表,顺序表中相邻的元素在计算机内有着相邻的存储位置。 顺序表是一种能够随机存取的存储结构。下面列出顺序线性表的建立、插入元素、删除元素的实现。#include <stdio.h> #include <stdlib.h> #include <malloc.h>#define ElemType int
C语言数据结构之线性表的基本操作
线性表的基本操作 内容: (1)顺序表的操作 输入一组整型元素序列,建立线性表的顺序存储结构。实现该线性表的遍历。在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。在该顺序表中删除或插入指定元素。 建立两个按值递增有序的顺序表,将他们合并成一个按值递增有序的顺序表。 (2)单链表的操作 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 实现该线性表的遍历。在该
严蔚敏版《数据结构》第二章线性表的算法C语言实现
首先,今天是中秋,明天是国庆,在这说声节日快乐啊。 说点题外话,今天出去走了走,看到药店就进去称体重了。尼玛,竟然轻了4斤,本来就是100刚出头,现在倒好,直接掉下100了。我想这可能是因为最近天天熬夜,而且最近学校还规定天天要去早读(直接导致睡眠不足),直到过了英语4级。唉,大一时不能考,不知今年12月能否考过啊。所以说各位还要注意休息啊,记得要早点休息。昨天晚上就11点后就因为写这个代码直到
c语言版数据结构之线性表归并大概
线性表:n个具有相同特性的数据元素的有限序列。较为灵活,可根据需要増长或缩短。 两线性表归并算法:(此时已知其元素按值非递减排列) void MergeList(List La, List Lb, List &Lc) { //已知线性表La和Lb中的数据元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 InitList(Lc); int ai,
《数据结构》(C语言版)——线性表的动态分配顺序存储结构
//P21 线性表的 顺序表示和实现 //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //Status是函数的类型,其值是函数结果状态代码 typedef int Status; //用到的库文件 #include /
数据结构(C语言版) 线性表顺序表示与实现
终极版#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT
数据结构——线性表总结
1、线性表 1、1 顺序表的效率分析        顺序表上的插入和删除是顺序表中时间复杂度最高的部分。在顺序表中插入一个数据元素时,主要的耗时部分是循环移动数据元素部分。循环移动数据元素的效率和插入数据元素的位置i有关。最坏情况是i=0,需要移动size个数据元素;最好情况是i=size,需要移动0个元素。设pi是第i个存储位置插入一个数据元素的概率设顺序表中数据元素的个数为n,当在顺序表的
数据结构C语言版——初始化一个线性表
数据结构C语言版——初始化一个线性表
建立一个线性表,依次从键盘输入的正整数,然后依次输出(一个简单参考事例)
建立一个线性表,依次从键盘输入的正整数(输入一个非正整数为结束),然后依次输出: #include using namespace std; struct node { int d; node *next; }; int main() { node *head,*p,*q; int x; head=0; q=NULL; cin>>x; while(x
线性表链式存储结构的c语言实现
线性表链式存储结构的c语言实现的操作