亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,請教一下關于數據結構問題,為什么我的怎么輸不出內容啊?

#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 關注
  • 317 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號