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語言指標使用前必須初始化?指標申明的時候最好初始化。初始化以...