#包含“stdio.h”
#包含" stdlib.h "
#定義狀態int
#定義溢出0
#定義真1
#定義假0
#定義OK 1
#定義MAXSIZE 100
typedef int ElemType
typedef結構列表
{ elem type elem[MAXSIZE];
int長度;
} SqList
void InitList(SqList & amp;L){
l .長度= 0;
}
/*創建序列表*/
void create list(SqList & amp;l)
{
int I;
printf("輸入長度");
scanf("%d ",& amp長度);//輸入表格長度
for(I = 1;我& lt=L .長度;i++)
scanf("%d ",& ampl . elem[I-1]);//輸入元素
}
//順序表的遍歷
void printdata(ElemType e){
printf("%4d ",e);
}
void Traverse(SQL list L,void(* visit)(element type e))
{ int I;
printf("列表的元素是:\ n ");
for(I = 1;我& lt=L .長度;i++){
if(I % 10 = = 0)printf(" \ n ");//每行顯示10個元素。
訪問(l . elem[I-1]);//輸出表格中的元素
}
printf(" \ n ");
}
//將元素E插入到有序序列表L中,使序列仍然有序。
空插入(SqList & ampl,ElemType e)
{int i,j;
if (L.length==MAXSIZE)exit(溢出);//表格已滿,無法插入。
for(I = 1;我& lt=長度和長度。& ampl . elem[I-1]& lt;= e;i++);//向後看
for(j = l . length;j & gt= I;j -)
l . elem[j]= l . elem[j-1];//元素向後移動
l . elem[I-1]= e;//插入e
l . length = l . length+1;//表格長度加上1
}
//建立壹個增量有序的序列表。
void create list _ Sorted(SqList & amp;l)
{int i,num
elem type e;
l .長度= 0;
printf("創建壹個排序列表,輸入列表的長度\ n ");
scanf("%d ",& ampnum);
printf("輸入數據%d個數字\n ",num);
for(I = 1;我& lt= numi++){
scanf("%d ",& ampe);
插入(L,e);
}
}
/*合並兩個排序列表*/
void MergeList(SqList La,SqList Lb,SqList & ampLc)
{int *pa,*pb,* pc
if(la . length+lb . length & gt;MAXSIZE)退出(溢出);
其他
{ pa = La.elempb = Lb.elempc = Lc.elem
而(pa & lt長度和長度。& amppb & lt磅元素+磅長度)
* pc++ =(* pa & lt;=*pb)?* pa++: * p b++;/*公有* * *部分合並*/
而(pa & ltla . elem+la . length)* pc++ = * pa++;
/*R1表的其余部分放在R的後面*/
while(Pb & lt;lb . elem+lb . length)* pc++ = * p b++;
/*R2表的其余部分放在R的後面*/
LC . length = la . length+lb . length;/*R表格長度*/
}
}
//確定元素是否對稱,對稱返回TRUE或FALSE。
狀態對稱(SqList L)
{int低,高;
低= 0;
高= l . length-1;
while(low & lt;高)
if(l . elem[low]= = l . elem[high]){ low++;高-;}
else返回(FALSE);返回(真);}
//序列表的主函數部分
//#包含" seqlist.h "
void main()
{ L2的SqList L 1;
int select
elem type e;
do { printf(" \ n 1 insert 2 merge ");
printf("\n3對稱0退出\ n ");
printf("請選擇(0-3)\ n ");
scanf("%d ",& amp選擇);
開關(選擇){
案例1:
InitList(L);
create list _ Sorted(L);
遍歷(L,print data);
printf(" \ n輸入插入的元素\ n ");
scanf("%d ",& ampe);
插入(L,e);
遍歷(L,print data);
打破;
案例二:
InitList(l 1);
create list _ Sorted(l 1);
遍歷(L1,print data);
InitList(L2);
create list _ Sorted(L2);
導線(L2,打印數據);
InitList(L);
合並列表(L1,L2,L);
遍歷(L,print data);
打破;
案例三:
InitList(L);
創建列表(L);
遍歷(L,print data);
if (Symmetric(L)) printf("Yes!\ n ");else printf(" Not \ n ");
打破;
案例0:破;
默認值:printf("錯誤!再試壹次!\ n ");
}
}while(選擇);
}
/*單向鏈表相關操作示例*/
/*類型定義和頭文件,文件名為sllink.h*/
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
typedef int ElemType//元素的實際類型
typedef結構LNode{
元素類型數據;
struct LNode * next
}LNode,* LinkList//定義節點和指針類型名稱。
//建立無序鏈表的插頭方法
void CreateList(鏈表& ampL){
鏈表p;
elem type e;
l =(LinkList)malloc(sizeof(LNode));
l-& gt;next = NULL
Printf("頭插入法建立鏈表,以0結尾\ n ");
scanf("%d ",& ampe);
while(e){
p =(LinkList)malloc(sizeof(LNode));
p->;數據= e;
p->;next = L-& gt;接下來;
l-& gt;next = p;
scanf("%d ",& ampe);
}
}
/*非遞減有序單向鏈表L插入元素E序列仍按順序*/
void Insert_Sort(鏈表& ampl,ElemType e){
鏈表p,s;
s =(LinkList)malloc(sizeof(LNode));
s-& gt;數據= e;
p = L;
while(p->;next & amp& ampp->;下壹個-& gt;數據& lt=e)
p = p-& gt;接下來;/*查找插入位置*/
s-& gt;next = p-& gt;接下來;/* Insert語句*p節點,然後插入*s節點*/
p->;next = s;
}
/*建立壹個遞增有序的單向鏈表*/
void Create_Sort(鏈表& ampL){
elem type e;
l =(LinkList)malloc(sizeof(LNode));
l-& gt;next = NULL
Printf("構建有序表,輸入任意整數數據,以0結尾\ n ");
scanf("%d ",& ampe);
while(e){
Insert_Sort(L,e);
scanf("%d ",& ampe);
}
}
/*單向鏈表的遍歷*/
無效遍歷(鏈表L){
鏈表p;
Printf("遍歷鏈表");
for(p = L-& gt;接下來;p;p = p-& gt;下壹個)
printf("%5d ",p-& gt;數據);
printf(" \ n ");
}
/*刪除元素e*/
無效刪除(鏈表& ampl,ElemType e){
鏈表p,q;
p = L;
q = L-& gt;接下來;
而(q & amp& ampq->;數據!=e){//找到元素的刪除位置。
p = q;
q = q-& gt;接下來;
}
如果(!q)printf(" \ n未刪除");/*元素e*/
else { p-& gt;next = q-& gt;接下來;/*找到刪除*/
免費(q);}
}
/*單向鏈表的反轉*/
無效交換(鏈表& ampL){
鏈表p,s;
p = L-& gt;接下來;
l-& gt;next = NULL
while(p){
s = p;
p = p-& gt;接下來;
s-& gt;next = L-& gt;接下來;
l-& gt;next = s;
}
}
/*兩個非減有序單向鏈表合並後仍然是非減序列*/
鏈表La,鏈表Lb,鏈表& ampLc){
鏈表p,q,s,後;
p = La-& gt;接下來;
q=Lb->接下來;
Lc =後方= La
免費(磅);
而(p & amp& amp問){
如果(p->;數據& ltq->;data){ s = p;p = p-& gt;接下來;}
else { s = q;q = q-& gt;接下來;}
後方-& gt;next = s;/*較小的元素插入頁腳*/
後方=後方-& gt;接下來;
}
if(p)rear-& gt;next = p;else rear-& gt;next = q;
}
/*主函數部分,文件名為sllink.c*/
//#包含" sllink.h "
void main(){
鏈表La,Lb,Lc;
elem type e;
int select
做{
Printf(" 1創建壹個無序表,然後刪除指定元素\ n ");
Printf(" 2。創建增量有序表,然後反轉\ n ");
Printf(" 3)創建兩個增量有序表,並組合成壹個仍在增長的表\ n ");
Printf(" 0退出,請輸入壹個選項(0-3)\ n ");
scanf("%d ",& amp選擇);
開關(選擇){
案例0:
打破;
案例1:
創建列表(La);
遍歷(La);
Printf("輸入要刪除的元素\ n ");
scanf("%d ",& ampe);
刪除(La,e);
遍歷(La);
打破;
案例二:
create _ Sort(La);
遍歷(La);
exch(La);
printf("交換的列表\ n ");
遍歷(La);
打破;
案例三:
create _ Sort(La);遍歷(La);
create _ Sort(Lb);橫移(磅);
MergeIncrease(La,Lb,Lc);遍歷(Lc);
打破;
默認值:
Printf("輸入選項錯誤,請重新輸入!\ n ");
}
}while(選擇);
}
不知道這些內容能不能幫到妳。