为了账号安全,请及时绑定邮箱和手机立即绑定

您好,请教一下关于数据结构问题,为什么我的怎么输不出内容啊?

您好,请教一下关于数据结构问题,为什么我的怎么输不出内容啊?

慕斯709654 2021-11-20 15:11:35
#include<stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;}SqList;void InitList(SqList *&L) //初始化顺序表L{L=(SqList *)malloc(sizeof(SqList));L->length;}void DestroyList(SqList *L)// 释放顺序表L{free(L);}int ListEmpty(SqList *L) // 判断顺序表L是否为空表{return(L->length==0);}int ListLength(SqList *L)//还回顺序表L的元素个数{return (L->length);}void DispList(SqList *L) //输出顺序表L{int i;if(ListEmpty(L)) return ;for(i=0;i<=L->length;i++){printf("%c",L->data[i]);}printf("\n");}int GetElem (SqList *L,int i, ElemType &e) // 获取顺序表L 中第i个元素{if(i<1||i>L->length)return 0;e=L->data[i-1];return 1;}int LocateElem(SqList *L,ElemType e) //在顺序表L中查找元素e{int i=0;while(i<L->length&& L->data[i]!=e) i++;if(i>=L->length)return 0;elsereturn i+1;}int ListInsert(SqList * &L,int i,ElemType e)//在顺序表L中第i个位置上插入元素e{int j;if(i<1||i>L->length+1)return 0;i--;for(j=L->length;j>i;j--)L->data[j]=L->data[j-1];L->data[i]=e;L ->length++;return 1;}int ListDelete(SqList * &L,int i, ElemType &e){int j;if(i<1||i>L->length)return 0;i--;e=L->data[i];for (j=i;j<L->length-1;j++){L->data[j]=L->data[j+1];}L->length--;return 1;}int main(){SqList *L;ElemType e;printf("(1)初始化顺序表L\n");InitList(L);printf("(2)依次采用尾插法插入 a,b,c,d,e 元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf("(3)输出顺序表L:");DispList(L);printf("(4) 顺序表L长度=%d\n",ListLength(L));printf("(5) 顺序表L 为%s\n",(ListEmpty(L) ? "空":"非空"));GetElem(L,3,e);printf("(6)顺序表L的第3个元素=%c\n",e);printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));printf("(8)在第4个元素位置上插入f元素\n");ListInsert(L,4,'f');printf("(9)输出顺序表L:");DispList(L);printf("(10)删除L的第3个元素\n");ListDelete(L,3,e);printf("(11)输出顺序表L:");DispList(L);printf("(12)释放顺序表L\n");DestroyList(L);return 0;}
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

void InitList(SqList *&L) //初始化顺序表L
{
L=(SqList *)malloc(sizeof(SqList));
L->length;
}
我觉得应该没有SqList *&L这种写法啊 亲
而且你去掉这种写法以后,主要原因在这里
你声明了一个指针
SqlList* L;
然后将指针传递给init函数进行赋值,要注意哦,指针是存放一块空间的地址值啊,但是指针本身在函数调用的时候是按值传递的,也就是说你调用init函数,只能在里面更改指针指向的内存空间里的值,却不能改变指针本身的值(即指针所包含的地址值),所以malloc是无效的哦
这就好像
void add(int a)
{
a++;
}
int main()
{
int a = 2;
add(a); //由于a按值传递,是将a进行了一次拷贝传给add,所以对a本身的值不会有任何影响
}

你可以改啊
(1)要么在init外进行malloc,然后在Init里进行length的赋值操作
(2)要么将指针的指针(即&L)传给init(SqlList **) 这样子传递的是指针的指针,就能更改指针中储存的内存对象的地址了



查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 277 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信