實驗1 鍊錶的插入和刪除

2021-08-11 05:37:18 字數 2161 閱讀 6058

【實驗內容】

設有兩個無頭結點的單鏈表,分別為ha,hb,其鏈中有資料域data,鏈域next,兩鍊錶的資料都按遞增序存放。現要求將hb表歸到ha表中,且歸併後ha仍按遞增排序,歸併中ha表中已有的資料若與hb相同,則hb中的資料不歸併到ha中,hb的鍊錶在演算法中不允許破壞。

【實驗目的】

1、 了解單鏈表、迴圈鍊錶和雙鏈表的基本知識;

2、 掌握演算法思想和資料結構的描述;

3、 掌握鍊錶的插入、刪除的相關語句及基本方法。

【實驗步驟與要求】

1、 實驗前的準備

(1) 了解c語言的基本概念;

(2) 了解c語言的基本段落。

2、 上機操作

(1) 了解鍊錶的基本知識;

(2) 掌握演算法思想和資料結構的描述;

(3) 掌握鍊錶的插入、刪除的相關語句及基本方法。

**:

#include#include//malloc函式要用的庫

/*這題的要求是要生成兩個鏈,輸入的資料無序但是輸出的時候要有序,所以在插入節點的時候就類似於選擇排序的寫法,

在合適的位置插入就好了。由於要求是無頭結點的寫法,之前有頭結點的做法是生成乙個空的節點,然後就可以直接在

該節點的next指標處插入節點就好,無頭結點的做法就相當於抓取第乙個節點作為頭結點,接下來就和有頭結點的做法

一樣在尾部插入資料就好了,至於在尋找插入位置是為什麼要特判第乙個,因為鍊錶是(當前節點的->next)->v小於待

插入節點的v的時候往該節點的next插入,也就是從第二個的v值開始判斷的,所以要特判一下第乙個,如果小於第乙個

就特殊處理一波

*/typedef struct node

list;

list* build(int v)//特殊處理頭結點

list* insert(list* head,int v)//有序插入

list* t=head;

while(t->next&&(t->next)->vnext;

}list* aft=malloc(sizeof(list));//生成節點

aft->next=t->next;

aft->v=v;

t->next=aft;//斷開乙個小口子將結點插入

return head;

}void bianli(list* head)//遍歷鍊錶

printf("\n");

}list* merge(list* heada,list* headb)//有序合併鍊錶並去重

else

t=head;

while(ta&&tb)//當鍊表都還有剩餘

if(ta==null)//如果到了a表表尾退出

break;

while(tb&&tb->v==t->v)

if(tb==null)//同理

break;

if(ta->vv)//值不重複,當a鏈的值較小的時候,將該節點加入a鏈

else//因為b鏈不能破壞,所以就新生成乙個節點複製下b鏈節點的資訊並加入a鏈

}while(ta)//如果上面退出迴圈是因為b鏈到了尾部,而a鏈沒有,直接連線剩下的a鏈

if(ta==null)

break;

t->next=ta;

ta=ta->next;

t=t->next;

t->next=null;

}while(tb)//和上文同理,上面迴圈退出原因是a鏈到了尾部,處理剩下的b鏈

if(tb==null)

break;

list* temp=malloc(sizeof(list));//和上面相同複製節點資訊加入

temp->v=tb->v;

temp->next=null;

t->next=temp;

t=t->next;

tb=tb->next;

}return head;//返回頭結點位置

}int main()

{ int i,j,n,m;

printf("input the size of a list:");//輸入a鏈大小

scanf("%d",&n);

printf("input the a list:\n");

list* head_a;

int v;

for(i=0;i

鍊錶的刪除和插入

struct student del struct student head,long num p1 head while num p1 num p1 num null if num p1 num else p2 next p1 next printf delete ld n num n n 1 e...

鍊錶的插入和刪除

while null p ipnext i if null p i pos 1 while null p pnext ipnext i if null p pnext i pos 1 pos為位置,1.不正常執行 1 位置為 pos 1 依靠 i pos 1 來報錯,2 比鍊錶結點個數多 插入需要多...

靜態鍊錶的插入和刪除

靜態鍊錶相當於是用乙個陣列來實現線性表的鏈式儲存結構,在靜態鍊錶中操作的是陣列。結構體陣列 一 靜態鍊錶的插入操作 靜態鍊錶的插入操作包含兩部分,首先是獲得空閒量的下標,程式 如下 int getcur staticlinklist tan 要想更好的理解,最好結合乙個靜態列表的例項來掌握,下面給出...