正文**:
#include
#include
typedef int datatype;
#include "linlist.h"
void combine(slnode *head1, slnode *head2);
void insertsort(int a, int n);
void main()
printf("\n");
//建立第二個鍊錶接收從鍵盤輸入的鍊錶資料
printf("請輸入任意個數的資料元素完成第二個鍊錶:\n");
getchar();
while(scanf("%d",&x))
//顯示當前鍊錶資料元素
printf("鍊錶一的資料元素為:");
for(i= 0; i < listlength(head1); ++i)
printf("\n");
printf("鍊錶二的資料元素為:");
for(i= 0; i < listlength(head2); ++i)
printf("\n");
//合成兩個鍊錶
combine(head1,head2);
}void combine(slnode *head1, slnode *head2)
r= p;
p= p->next;
r->next= q;
q->next= p;
//將以head1為頭節點的鍊錶中的資料元素輸出
printf("將以head1為頭節點的鍊錶中的資料元素輸出:");
for(i= 0; i
printf("\n");
//將鍊錶head1資料放入data陣列中並排序
for(i= 0; i < listlength(head1); ++i)
insertsort(a,listlength(head1));
//將排序後的資料元素按序放入新建的鍊錶com中並輸出
for(i= 0; i < listlength(head1); ++i)
listinsert(com,i, a[i]);
printf("排序後的鍊錶com資料元素分別顯示為:");
for(i= 0; i < listlength(com); ++i)
printf("\n");
}else
s= q;
q= q->next;
s->next= p;
p->next= q;
//將以head2為頭節點的鍊錶中的資料元素輸出
printf("將以head2為頭節點的鍊錶中的資料元素輸出:");
for(i= 0; i
printf("\n");
//將鍊錶head2資料放入data陣列中並排序
for(i= 0; i < listlength(head2); ++i)
insertsort(a,listlength(head1));
//將排序後的資料元素按序放入新建的鍊錶com中並輸出
for(i= 0; i < listlength(head2); ++i)
listinsert(com,i, a[i]);
printf("排序後的鍊錶com資料元素分別顯示為:");
for(i= 0; i < listlength(com); ++i)
printf("\n");}}
//直接插入排序
void insertsort(datatype a, int n)
}}標頭檔案 「linlist.h」
#include
typedef int datatype;
#include
typedef struct node
slnode;
void listinitiate(slnode **head) /*初始化*/
int listlength(slnode *head)
return size; }
int listinsert(slnode *head, int i, datatype x)
/*在帶頭結點的單鏈表head的資料元素ai(0 ≤ i ≤ size)結點前*/
/*插入乙個存放資料元素x的結點*/
if(j != i - 1)
/*生成新結點由指標q指示*/
if((q = (slnode *)malloc(sizeof(slnode))) == null) exit(1);
q->data = x;
q->next = p->next; /*給指標q->next賦值*/
p->next = q; /*給指標p->next重新賦值*/
return 1; }
int listdelete(slnode *head, int i, datatype *x)
/*刪除帶頭結點的單鏈表head的資料元素ai(0 ≤ i ≤ size - 1)結點*/
/*刪除結點的資料元素域值由x帶回。刪除成功時返回1;失敗返回0*/
if(j != i - 1)
s = p->next; /*指標s指向資料元素ai結點*/
*x = s->data; /*把指標s所指結點的資料元素域值賦予x*/
p->next = p->next->next; /*把資料元素ai結點從單鏈表中刪除指*/
free(s); /*釋放指標s所指結點的記憶體空間*/
return 1; }
int listget(slnode *head, int i, datatype *x)
/*取資料元素ai和刪除函式類同,只是不刪除資料元素ai結點*/
if(j != i)
*x = p->data;
return 1; }
void destroy(slnode **head)
*head = null; }
資料結構 鍊錶
鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...
資料結構 鍊錶
鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...
資料結構 鍊錶
一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...