當前位置:成語大全網 - 書法字典 - 字典順序表的實現

字典順序表的實現

順序存儲的線性表算法

#包含“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(選擇);

}

不知道這些內容能不能幫到妳。