迴圈單鏈表的插入刪除,與兩表的和並

2021-10-10 20:08:41 字數 2076 閱讀 2872

/*迴圈單鏈表的插入刪除,與兩表的合併*/

#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.否則查詢成功,在系統中生成乙個空結...