關於單鏈表初始化的問題

時間 2021-09-05 11:55:52

1樓:匿名使用者

一般malloc之後的節點空間都需要釋放的,釋放出錯那可能是你的p位址操作到了非法部分!也

就是程式的問題!

給個範例你看看:

#include

#include

#define num 10 //總共10個節點(包含頭結點)

typedef struct node//結點

int num;//編號

int data;//資料

struct node* next;//下乙個結點

}node,*pnode;

initlist( const pnode phead )

pnode endnode=phead;//指向最後乙個節點

pnode add = null; //要新增的節點

int i=1;

for ( ; iif ( null==(add = (pnode)malloc(sizeof(node))) )

printf("memory overflow!\n");

printf("please enter %dth node data:",i);

scanf("%d",&add->data);

add->num = i; //編號從1--9

//新新增的節點指標域指向尾節點的下乙個節點,即null

//等同於 add->next = null;

add->next = endnode->next;

//原先的尾節點指標域指向新新增的節點

endnode->next = add;

//更新尾節點,將新新增的節點作為新的尾節點

endnode = add;

void main(void)

pnode phead = null;

pnode temp = null;

int i=0;

//初始化頭結點(第0個節點)

if ( null==(phead = (pnode)malloc(sizeof(node))) )

printf("memory overflow!\n");

phead->num = 0;//編號為0

phead->next = null;//next指向空指標

//初始化其他節點

initlist( phead );

//顯示最終建成的鍊表

temp = phead; //中間變數指標指向頭結點

printf("this is the list that you create:\n");

for ( ; iprintf("\t%d\t%d\n",temp->num,temp->data);

temp = temp->next;

//從頭結點開始依次free

while ( null != phead )

temp = phead->next;

free(phead);

phead = temp;

2樓:匿名使用者

這個是建立單鏈表表頭的乙個函式:linklist creatnulllistlink(void) // 函式名,不帶引數,返回鍊表頭head(linklist 型別) 這個函式只是初始化鍊表的乙個頭鍊表,頭鍊表指向的下乙個鍊表為空。現在是:

頭鍊表----->x(null) 下一步就是要向頭鍊表裡新增值。頭鍊表------>下乙個鍊表------>下乙個鍊表------->下乙個鍊表----->..........------>尾鍊表.

這些是資料結構的基本只是,為程式設計打基礎的,只有基礎打好了,以後發展很有幫助。祝你好運,加油哦!

3樓:

在上面的**中,你定義了乙個指向結構體node的指標,即node*型。所以,初始化函式裡面:

status initlist(linklist *l) 的*l,是linklist型變數,即頭指標;將頭指標作為引數傳遞進函式裡。

*l = (linklist)malloc(sizeof(node)),這裡,動態分配乙個node型別的空間,並返回linklist*型空間,儲存單元的首位址儲存到指標變數l中(這裡應該是linklist*)。

(*l)->next = null,這裡(*l)就是頭指標,這句的意思是頭指標指向的下乙個結點(即鍊表的第乙個結點)為空,即初始化操作。

頭結點其實一般只定義乙個指標,方便理解,資料域一般為空的。你也可以把typedef struct node *linklist; 寫成:

typedef struct linklist; 這樣就比較好理解了。

其實,我最近也在看這些東西,算是個小結吧,如有錯誤,歡迎指證!

陣列初始化問題

分配的空間,比如 int a 10 這就是在定義時由系統給你分配了10個int型別的空間,這個空間是可以初始化的,比如 int a 10 那麼在這個定義之後,系統會首先分配10個int型別的儲存空間,然後把大括號裡面的數字分別的,按順序放到這10個空間裡。你所做的只是寫這麼一句,而陣列賦值的操作就由...

關於C 初始化的問題

程式的執行順序是.先引導程式到記憶體.初始化全域性變數.呼叫main函式 main函式退出 刪除全域性變數 其他收尾工作.所以一般來說是會輸出的.輸出在main函式被呼叫之前.析構函式輸出在main結束以後 之所以加個 一般 是因為cout也是個全域性變數,你不能保證cout在你的q之前被初始化.如...

指標的初始化,指標變數的如何初始化?

拜託,這是宣告,不是定義變數,沒有變數,何來初始化?你甚至可以把thecat去掉。問題補充 這是函式定義,你前面的是函式宣告。thecat指標變數的初始化是由主調函式完成的,functiontwo函式不必理會,也不應理會,直接拿來用就行。c語言指標使用前必須初始化?指標申明的時候最好初始化。初始化以...