/*迴圈單鏈表的插入刪除,與兩表的合併*/
#include
#include
#include
#define error 0;
#define ok 1;
typedef
struct nodenode,
*linklist;
linklist initiallist
(linklist l)
/*頭插法建立迴圈單鏈表*
/void
createhead
(linklist l)
else}}
/*尾插法建立迴圈單鏈表*/
void
createtail
(linklist l)
else}}
/*求迴圈單鏈表的長度*/
intcirclelistlength
(linklist l)
return i;
}/*輸出迴圈單鏈表*/
void
print
(linklist l)
printf
("\n");
}/*在帶頭結點的迴圈單鏈表l中第i個位置插入值為e的結點*/
intinsertlist
(linklist l,
int i,
char e)
//查詢到i-1個結點
if(pre==l)
s=(node*
)malloc
(sizeof
(node));
s->data=e;
s->next=pre->next;
pre->next=s;
return ok;
}/*在帶頭結點的迴圈單鏈表刪除第i個元素*/
void
deletelist
(linklist l,
int i)
if(pre->next==l)
p=pre->next;
pre->next=p->next;
free
(p);
//釋放p所指的儲存單元,p成為野指標
}/*迴圈單鏈表合併演算法*/
/*演算法1*/
linklist merge1
(linklist la,linklist lb)
//la,lb是鍊錶的頭指標
/*演算法2*/
linklist merge2
(linklist la,linklist lb)
//la,lb是鍊錶的尾指標,尾指標指向頭乙個節點,頭指標指向頭結點
intmain
(void
)
除錯結果
initial successful!
initial successful!
create circle-list la:
125368497$
success create list l as following...
the length of this single-circle is 912
5368
49create circle-list lb:wsedrftgyh$
success create list l as following...
the length of this single-circle is 11
w s e d r f t g y
la merge lb to lc as show following...
1253
6849
70 w s e d r f t g y
----
---delete in circle-list lb--
-----1
2368
4970 w s e d r f t g y
----
---insert in circle-list lb--
-----1
2 a 368
4970 w s e d r f t g y
單鏈表的插入與刪除
順序結構的缺點還是蠻大的,現在來看看單鏈表的插入與刪除。單鏈表中,在c語言可以用結構體指標描述 typedef struct node node typedef struct node linklist 有一點很重要 比如我隨便畫乙個。千萬別也成 p next s s netx p next 正確的...
單鏈表的插入和刪除
常見的資料結構只有兩種 1 陣列 2 鍊錶 陣列中的元素是連續儲存的,而鍊錶的元素則可以不連續,只需要有指標指向下乙個元素即可。因此鍊錶適合儲存插入刪除比較頻繁的一組資料。另外鍊錶的儲存空間是動態的,不必預先分配指定的空間大小。下面介紹鍊錶的幾種常見操作。首先先定義乙個鍊錶 struct linkl...
單鏈表的插入和刪除
單鏈表的插入與刪除 單鏈表的插入 單鏈表第 i個資料插入結點的演算法思路 1.宣告乙個結點 p指向第乙個結點,初始化j從 1開始 2.當 j時,就遍歷鍊錶,讓 p的指標向後移動,不斷指向下乙個結點,j累加 1 3.若到鍊錶末尾 p為空,則說明第 i個元素不存在 4.否則查詢成功,在系統中生成乙個空結...