シーケンステーブルの基本操作(C)
11337 ワード
シーケンスストレージ構造では、初期化、作成、挿入、削除、検索、遍歴、逆設定、連結演算などの基本的な操作を行います.
実行例:
実行例:
La :5
La ( 5 )
1 3 5 7 9
*** La ***
1 3 5 7 9
*** ***
:3
:8888
*** 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);
}