シーケンステーブルの基本操作(C)

11337 ワード

シーケンスストレージ構造では、初期化、作成、挿入、削除、検索、遍歴、逆設定、連結演算などの基本的な操作を行います.
実行例:
      La   :5
      La    ( 5 )
1 3 5 7 9
***       La      ***
1       3       5       7       9
***      ***38888
***       La      ***
1       3       8888    5       7       9
***      ***2
***       La      ***
1       8888    5       7       9
***      ***         :3
      3    !
***       ***
***       La      ***
9       7       5       8888    1
***       Lb ***
      Lb   :5
      Lb    ( 5 )
2 4 6 8 0
***       Lb      ***
2       4       6       8       0
***      La   Lb ***
***       Lc      ***
2       4       6       8       0       9       7       5       8888    1

 
//#########################################################
//               
//       、  、  、  、  、  、  、  
//#########################################################
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>

#define MAX_SIZE 100

typedef int ElemType;

//     SeqList
typedef struct
{
    ElemType list[MAX_SIZE];
    int size;
} SeqList;

//      
void ListInit(SeqList *L)
{
    //         
    L->size = 0;
}

//      
void ListInsert(SeqList *L, int i, ElemType e)
{
    int j;
    if (L->size >= MAX_SIZE)
    {
        printf("     ,    !
"); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d
", L->size); } else { for (j = L->size; j > i - 1; j--) { L->list[j] = L->list[j - 1]; } L->list[i - 1] = e; L->size++; } } // void ListDelete(SeqList *L, int i) { int j = 0; if (L->size <= 0) { printf("
"); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d
", L->size); } else { for (j = i; j <= L->size - 1; j++) { L->list[j - 1] = L->list[j]; } L->size--; } } // void ListSearch(SeqList *L, ElemType e) { int i; for (i = 0; i < L->size; i++) { if (L->list[i] == e) { printf("%d %d
", e, i + 1); return; } } printf(" %d !
", e); } // void ListDisplay(SeqList *L) { int i; for (i = 0; i < L->size; i++) { printf("%d\t", L->list[i]); } printf("
"); } // void ListReverse(SeqList *L) { int i; ElemType temp; for (i = 0; i < (L->size / 2); i++) { temp = L->list[i]; L->list[i] = L->list[L->size - i - 1]; L->list[L->size - i - 1] = temp; } } // void ListMerge(SeqList *L1, SeqList *L2, SeqList *L3) { int i = 0, j = 0, k = 0; while (i < L1->size&&j < L2->size) { if (L1->list[i] < L2->list[j]) { L3->list[k] = L1->list[i]; i++; k++; } else { L3->list[k] = L2->list[j]; j++; k++; } } while (i < L1->size) { L3->list[k++] = L1->list[i++]; } while (j < L2->size) { L3->list[k++] = L1->list[j++]; } L3->size = k; } int main() { SeqList La, Lb, Lc; int i, e; int m, n; printf("*** La ***
"); ListInit(&La); printf(" La :"); scanf("%d", &m); La.size = m; printf(" La ( %d )
", m); for (i = 0; i < m; i++) { scanf("%d", &La.list[i]); } printf("*** La ***
"); ListDisplay(&La); printf("*** ***
"); printf(""); scanf("%d", &i); printf(""); scanf("%d", &e); ListInsert(&La, i, e); printf("*** La ***
"); ListDisplay(&La); printf("*** ***
"); printf(""); scanf("%d", &i); ListDelete(&La, i); printf("*** La ***
"); ListDisplay(&La); printf("*** ***"); printf(""); scanf("%d", &e); ListSearch(&La, e); printf("*** ***
"); ListReverse(&La); printf("*** La ***
"); ListDisplay(&La); printf("*** Lb ***
"); ListInit(&Lb); printf(" Lb :"); scanf("%d", &n); Lb.size = n; printf(" Lb ( %d )
", n); for (i = 0; i < n; i++) { scanf("%d", &Lb.list[i]); } printf("*** Lb ***
"); ListDisplay(&Lb); printf("*** La Lb ***
"); ListInit(&Lc); ListMerge(&La, &Lb, &Lc); printf("*** Lc ***
"); ListDisplay(&Lc); scanf("%d", &e); }