2 2 線性表的單鏈表

2021-09-26 03:05:34 字數 2718 閱讀 7032

ps:1、p、l的結點都是指標型別 

2、頭結點插入與輸出的順序相反

3、注意左值右值的區別

p->next=q->next;  //q->next是指到的下乙個結點,非指標本身;p->next是指標本身(即p的指標域)  (與左值右值有關)
4、後移用p=p->next;不用  p++;   因為位址不連續

p->next;  表示指標變數指向指標域(結構體裡的叫指標域,結構體外指向結點的叫結點指標、指標變數)

5、結構體可模擬  typedefintstatus;

typedefstruct lnodelnode,*linklist;   //linklist 等價於 struct lnode * (結構體指標) ,lnode 等價於 struct lnode (結構體本身)

執行清空操作後【 cleanlist(linklist &l) 】的情況如下圖,但不知道為什麼注釋free(p);這行就可以執行清除操作了,但空間好像沒放出來吧。。。

解決free();中止問題:

void hcreate(linklist &l)       //多了乙個1?  是後面的「1.***插入建立」裡的1.。。 輸出空行就可以了

}

free(p);//刪除p指向結點所佔的記憶體,不是刪除p本身所佔的記憶體

l的malloc的sizeof裡是linklist,p的malloc的sizeof裡是lnode

sizeof(linklist)!=sizeof(lnode)鍊錶結點的指標大小不等於鍊錶結點的大小

申請空間將指標當成了結點,釋放時越界

return error;的情況:

完整**:

#include#include#include#define ok 1

#define overflow -2

#define error 0

typedef int elemtype;

typedef int status; //兩個插入都有問題(已解決)

typedef struct lnode

lnode,*linklist;

//頭插入建立,輸出順序相反

void hcreate(linklist &l) //多了乙個1? 是後面的「1.***插入建立」裡的1.。。 輸出空行就可以了

}void rcreate(linklist &l) //多了乙個1? 是後面的「1.***插入建立」裡的1.。。

}status listinsert(linklist &l) //i在定義的時候要=1!!

if(!p||j>i-1) return error;

s=(linklist)malloc(sizeof(lnode)); //s是新結點

if(!s) return overflow;

s->data=e;

s->next=p->next;

p->next=s;

return ok;

}status listdelete(linklist &l) //被迫中止?——>i在定義的時候要=1!!

q=p->next;

p->next=q->next; //q->next是指到的下乙個結點,非指標本身;p->next是指標本身 (與左值右值有關)

e=q->data;

free(q);

return ok;

if(!(p->next)||j>i-1) return error;

}void output(linklist l)

}status linklength(linklist l)

return i;

}status getelem(linklist &l,int i)

e=p->data;

return e;

}status locateelem(linklist &l,elemtype e)

if(p->next=null && p->data!=e)

return error;

else

return i;

}void cleanlist(linklist &l)

}void main()

break;

case 9:cleanlist(l);break;

case 0:exit(0);break;

} }}

線性表之單鏈表

cpp view plain copy linkedlist linc 2013.2.26 include include include define ok 1 define error 1 define ture 1 define false 0 struct node typedef stru...

線性表及單鏈表

一.頭指標與頭結點的異同 頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空,頭指標是鍊錶的必要元素。頭結點 頭結點是為了操作的統一和方便而建立的,放在第一元素的結點之前,其資料域一般無...

線性表之單鏈表

零個或多個資料元素的有限序列,線性表中的元素是一對一的關係,除了第乙個元素和最後乙個元素外,其他元素都是首尾相接的。線性表有兩種儲存方式,一種是順序儲存結構,另一種是鏈式儲存結構。指用一段位址連續的儲存單元依次儲存線性表的資料元素。優點 無需為表示元素間的邏輯關係而增加額外的儲存空間 隨機查詢元素,...