declaration.h
function.h#ifndef declaration_h_included
#define declaration_h_included
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define elemtype int
typedef elemtype* triplet;
typedef int status;
typedef struct lnode
lnode, *linklist;
#endif // declaration_h_included
function.c#ifndef function_h_included
#define function_h_included
void createlist_l(linklist *l, int n);
//逆序輸入n個元素的值,簡歷帶頭結點的單鏈表l
status listinsert_l(linklist *l , int i, elemtype e);
//在帶頭結點的單鏈線性表中第i個位置前插入元素e
status listdelete_l(linklist *l, int i, elemtype e);
//在帶頭結點的單鏈線性表中,刪除第i個元素並由e返回其值
status getelem_l(linklist l, int i, elemtype *e);
//l為帶頭結點的單鏈表的頭指標
//當第i個元素存在時將其值付給e並返回ok,否則返回error
status mergelist_l(linklist *la, linklist *lb, linklist *lc);
//歸併la和lb表到lc並按非遞減序列排列
void printlist_l(linklist l);
//輸出單鏈表中的內容
#endif // function_h_included
main.c#include #include #include "declaration.h"
void createlist_l(linklist *l, int n)
}//createlist_l
status listinsert_l(linklist *l , int i, elemtype e)
if(!p || j >i-1) return error; //i小於1或大於表長加1
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s; //先連線後插入
return ok;
}status listdelete_l(linklist *l, int i, elemtype *e)
if( !(p->next) || j > i-1) return error;//刪除位置不合理
q=p->next; p->next=q->next;
*e=q->data;
free(q);
return *e;
}status getelem_l(linklist l, int i, elemtype *e)
if( !p || j>i) return error; //第i個元素不存在
*e=p->data;
return *e;
}//getelem_l()
status mergelist_l(linklist *la, linklist *lb, linklist *lc)
else
}while( pa )
while( pb)
return ok;
}//mergelist_l()
void printlist_l(linklist l)
分別定義二級指標la,lb,lc,將它們作為引數傳遞到createlist_l()函式中,這樣我們就可以在區域性的函式裡面為#include #include #include "declaration.h"
#include "function.h"
int main()
else
printf("merget failed");
return 0;
}
*la, *lb, *lc分配儲存空間,這些空間在結束函式呼叫時是不會消失的。c語言中引數傳遞都是值傳遞的方式:若以變數的值作為形參,傳入的是乙份值的拷貝。函式無返回型別時,對變數值得改變僅在該呼叫函式內有效;若以指標或陣列名坐形參,傳遞的是變數的位址,同樣的在呼叫函式內對這個位址的改變不會擴散到這個函式外,但對這個位址所代表的記憶體空間進行賦值,這種改變是永久的,結束呼叫時也不會被釋放。
在實現mergelist_l(linklist *la, linklist *lb, linklist *lc)時,一開始忘記為*lc分配位址空間,使pc成為野指標,結果執行時程式一直掛掉浪費了好長一段時間。切記指標使用時一定要初始化。
執行結果:
資料結構 線性鍊錶的c語言實現
鍊錶實現的邏輯分析 為了實現業務結點的靈活定義,我們需要定義單獨定義鍊錶結點來實現鍊錶的串接與查詢,而要讓業務結點包含鍊錶結點,以實現通過鍊錶結點將業務結點串接起來。而為了實現業務結點與鍊錶結點的位址統一,我們在定義業務結點時要將鍊錶結點包含在頭部,以實現目的。示意圖如下圖所示。鍊錶結點定義 typ...
資料結構 線性表(C語言實現)
一.線性表 1 定義 是由同一型別的資料元素構成的有序序列的線性結構。2 儲存實現 順序儲存,鏈式儲存 順序儲存的優點 儲存密度大,由於用的是陣列不需要儲存位址。順序儲存的缺點 對順序表插入刪除時需要移動資料元素來實現,影響執行效率 鏈式儲存的優點 對線性表的插入刪除不需要移動資料元素,只需要修改鏈...
資料結構線性表C語言實現
include include define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define initsize 100 typedef int status t...