【實驗內容】
設有兩個無頭結點的單鏈表,分別為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 要想更好的理解,最好結合乙個靜態列表的例項來掌握,下面給出...