線性表的鏈式儲存結構(菜鳥問題)

2021-06-22 00:13:07 字數 2804 閱讀 6828

#include #include /*線性表的鏈式儲存結構*/

#define ok 1

#define error -1

typedef int elemtype;

typedef int status;

typedef struct node,*list;

//有哪些操作呢?

status initlist(list l)

//獲取元素

status getelem(list l ,int i,elemtype *e)

if(!p || j>i)

return error;

*e=p->data;

return ok;

}//獲取鍊錶長度

int getlength(list l)

return i;

}status storenode(list *l,elemtype e)

//得新建乙個結點

t=(list)malloc(sizeof(node));

t->data=e;

t->next=null;

p->next=t;

return ok;

}/*插入元素*/

status insertnode(list *l,elemtype e,int i)

//新建乙個結點

list t;

t=(list)malloc(sizeof(node));

t->data=e;

t->next=p->next;

p->next=t;

return ok;

}int main()

else

int n;

printf("輸入要存入的元素個數");

scanf("%d",&n);

int i,temp,e,location;

for(i=0;inext;

while(t)

getelem(l,2,&e);

printf("%d\n",e);

printf("%d\n",getlength(l));

return 0;

}

以上程式整體能夠執行;

但是發現問題

如果沒有如下這段**

t=l->next;

while(t)

會出現異常,直接終止程式;為什麼?單獨呼叫各個函式也會出現問題。

原來是沒有給鍊錶l分配儲存空間;

如果在初始化時改為

status initlist(list *l)

呼叫

initlist(&l)
可以解決此問題。

問題2:

//1. 單鏈表的初始化

status initlist(list *l)

//2. 當鍊表的整表建立,依次從尾部插入結點

status createtaillist(list *l)

//初始化隨機數種子,準備產生隨機數,依賴標頭檔案

srand(time(0));

for(i=0;idata=rand()%100+1;//產生1~100的隨機數

t->next=(*l)->next;//指向l的尾部

(*l)->next=t;

}return ok;

}

createtaillist中呼叫initlist會出現問題

int main()

}return 0;

}

以上**呼叫會出現問題,直接終止程式;

但是如果在createtaillist中登出初始化函式initlist;而在main函式中單獨呼叫initlist後執行createtaillist,又可以正常執行!!

為毛?問題3:

status createheadlist(list *l)

(*l)->next=null;

return ok;

}

執行失敗

但是改為以下**就沒有問題!(只是將*l用p來替換)

status createheadlist(list *l)

p->next=null;

return ok;

}

這又是為什麼?

問題4:

int getlen(list l)

//*len=length;

return length;

}

在main函式中呼叫直接終止程式了!指標啊,指標!!!!!!!!

printf("當前鍊錶長度為:%d\n",getlen(l));

媽蛋,終於發現問題了,原來是在主函式中呼叫函式時出了問題

main中

list l;

initlist(&l);

if(ok==createheadlist(&l))

}printf("當前鍊錶長度為:%d\n",getlen(l));

注意:當我檢視鍊錶各個結點的值時,直接對l進行移動指標操作,l=l->next;當迴圈結束後,l指向的是null,在後面的getlen(l)中,其實是把null傳給了l,當然會出現問題了!

線性表的鏈式儲存結構

線性表的鏈式儲存結構 順序儲存結構不足的解決辦法 缺點 最大的缺點就是插入和刪除時需要移動大量元素。為了表示每個資料元素 ai與其直接後續資料元素 ai 1 之間的邏輯關係,對資料元素 ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後續的資訊。我們把儲存資料元素資訊的域稱為資料域,把儲存...

線性表的鏈式儲存結構

線性表的鏈式儲存結構,雙向鍊錶實現 package 線性表 public class dulinklist public node t data,node prev,node next 儲存該鍊錶的頭節點 private node header 儲存該鍊錶的尾節點 private node tail...

線性表的鏈式儲存結構

順序儲存結構的缺點 插入和刪除時需要移動大量元素 鏈式儲存結構的特點 用一組任意的儲存單元儲存線性表的資料元素 資料結構 儲存分配方式 時間效能 空間效能 順序儲存結構 用一段連續的儲存單元一次儲存線性表的資料元素 查詢 o 1 插入刪除 o n 需要預分配儲存空間,分大了浪費,分小了易發生上溢 單...