중화사전망 - 자전 검색 - 사전 순서 테이블 구현

사전 순서 테이블 구현

순차 저장을위한 선형 테이블 알고리즘

#' stdio.h' 포함

# "stdlib.h" 포함

# 상태 정의 int

# 오버플로우 0 정의

# 참 정의 1

# false 0 정의

# ok/kloc 정의-0/

# maxsize/kloc 정의-0/00

Typedef int ElemType

Typedef 구조 목록

{elem type elem [maxsize];

Int 길이;

} SqList

Voidinit 목록 (sqlist & L){

L. 길이 = 0;

}

/* 시퀀스 테이블 생성 */

Void createlist (sqlist & L)

{

Int I;;

Printf ("입력 길이");

Scanf("%d ",& 길이); //테이블 길이 입력

For (I =1; 나< = 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; 나< = 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; 나<= 길이와 길이. & ampl.elem [I-1] < = e;; I++); //뒤를 보다

For (j = l.length; J>= 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 & L)

{int I, num

Elem type e;;

L. 길이 = 0;

Printf ("정렬 목록을 만들고 목록 길이를 입력하십시오. \ n");

Scanf("%d ",& ampnum);

Printf ("입력 데이터 %d 자리 숫자 \n", num);

For (I =1; 나<= numi++){

Scanf("%d ",& ampe);

삽입 (l, e);

}

}

/* 두 개의 정렬 목록 병합 */

Void MergeList(SqList La, SqList Lb, SqList & ampLc)

{int *pa, *pb, * PC

If (la.length+lb.length > MAXSIZE) 종료 (오버플로);

기타

{pa = la.elempb = lb.elempc = lc.elem

대신 (pa< 길이와 길이. & amppb & lt 파운드 요소+포인트 길이)

* p c++= (* pa < =*pb)? * pa++:* Pb++; /* 공개 * * * 부분 통합 */

(pa & ltla.elem+la.length) * p c++= * pa++;

/*R 1 테이블의 나머지 부분은 r 뒤에 있습니다 */

While(Pb & lt;; Lb.elem+lb.length) * p c++= * 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]) {lo w++; 높음-; }

Else 반환 (false); 반환 (참); }

//시퀀스 테이블의 주 함수 섹션

//# 에는 "seqlist.h" 가 포함되어 있습니다

Void main ()

{L2 의 sqlist l1;

Int select

Elem type e;;

Do {printf ("\ n1insert2merge");

Printf("\n3 대칭 0 종료 \ n ");

Printf ("선택 (0-3) \ n");

Scanf("%d ",& 선택);

스위치 (선택) {

사례 1:

Init 목록 (l);

Createlist _ sorted (l);

순회 (l, print data);

Printf(" \ n 삽입된 요소 입력 \ n ");

Scanf("%d ",& ampe);

삽입 (l, e);

순회 (l, print data);

깨뜨리다

사례 2:

Initlist (l1);

Createlist _ sorted (l1);

순회 (L 1, printdata);

Init 목록 (L2);

Createlist _ sorted (L2);

와이어 (L2, 플롯 데이터);

Init 목록 (l);

목록 병합 (L 1, L2, l);

순회 (l, print data);

깨뜨리다

사례 3:

Init 목록 (l);

목록 만들기 (l);

순회 (l, print data);

If (symmetric (l)) printf ("예! \ n "); Elseprintf ("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-> Next = NULL

Printf ("헤드 삽입법은 0 으로 끝나는 연결된 목록을 만듭니다. \ n");

Scanf("%d ",& ampe);

While(e){

P = (linklist) malloc (sizeof (lnode));

P->; 데이터 = e;;

P->; Next = L-& gt;; 다음으로,

L-> Next = p;;

Scanf("%d ",& ampe);

}

}

/* 비내림차순 단방향 연결된 목록 l 삽입 요소 e 시퀀스는 여전히 순서대로 */

Void Insert_Sort (링크 목록 & ampl, ElemType e){

연결된 목록 p, s;

S = (linklist) malloc (sizeof (lnode));

S-> 데이터 = e;;

P = L;;

While (p->; Next & amp & ampp->; 다음-> 데이터 & lt=e)

P = p-& gt;; 다음으로, /* 삽입 위치 찾기 */

S-> Next = p-& gt;; 다음으로, /* Insert 문 *p 노드 다음에 *s 노드 */

P->; Next = s;;

}

/* 오름차순 단방향 연결된 목록 만들기 */

Void Create_Sort (링크 목록 & ampL){

Elem type e;;

L = (linklist) malloc (sizeof (lnode));

L-> Next = NULL

Printf ("순서 테이블을 작성하고 임의의 정수 데이터를 입력하여 0 으로 끝남 \ n");

Scanf("%d ",& ampe);

While(e){

Insert_Sort(L, e);

Scanf("%d ",& ampe);

}

}

/* 단방향 연결된 목록 순회 */

잘못된 트래버스 (연결된 목록 L){

연결된 목록 p;

Printf ("연결된 목록 통과");

For (p = l-> 다음으로, P; P = p-& gt;; 다음)

Printf("%5d ",p-> 데이터);

Printf ("\ n");

}

/* 요소 삭제 e*/

유효하지 않은 삭제 (연결된 목록 & ampl, ElemType e){

연결된 목록 p, q;

P = L;;

Q = L-& gt;; 다음으로,

그리고 (q& & 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-> Next = NULL

While(p){

S = p;;

P = p-& gt;; 다음으로,

S-> Next = L-& gt;; 다음으로,

L-> Next = s;;

}

}

/* 두 개의 비감산 단방향 연결된 목록이 병합된 후에도 여전히 비감산 시퀀스 */

연결된 목록 La, 연결된 목록 Lb, 연결된 목록 & ampLc){

연결된 목록 p, q, s, 뒤;

P = La-& gt;; 다음으로,

Q=Lb- > 다음;

Lc = 후면 = La

무료 (파운드);

그리고 (p & amp& amp 질문) {

만약 (p->; 데이터<q->; 데이터) {s = p; P = p-& gt;; 다음으로, }

Else {s = q;; Q = q-& gt;; 다음으로, }

후면-> Next = s;; /* 작은 요소 삽입 바닥글 */

후면 = 후면-> 다음으로,

}

If (p) rear-> 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 ",& 선택);

스위치 (선택) {

시나리오 0:

깨뜨리다

사례 1:

목록 만들기 (la);

순회 (라);

Printf ("삭제할 요소 입력 \ n");

Scanf("%d ",& ampe);

삭제 (La, e);

순회 (라);

깨뜨리다

사례 2:

Create _ sort (la);

순회 (라);

엑치 (la);

Printf ("교환 목록 \ n");

순회 (라);

깨뜨리다

사례 3:

Create _ sort (la); 순회 (라);

Create _ sort (lb); 트래버스 (파운드);

MergeIncrease(La, Lb, LC) : 순회 (LC);

깨뜨리다

기본값:

Printf ("입력 옵션이 잘못되었습니다. 다시 입력하십시오! \ n ");

}

}while (선택);

}

이 내용이 너에게 도움이 될지 모르겠다.