順序表的基本操作(C)


在順序存儲結構實現基本操作:初始化、創建、插入、刪除、查找、遍歷、逆置、合並運算。

運行示例:

請輸入線性表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("順序表已滿,無法插入!\n");
    }
    else if (i < 0 || i > L->size)
    {
        printf("i must be 0 - %d\n", 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("順序表中已空!\n");
    }
    else if (i < 0 || i > L->size)
    {
        printf("i must be 0 - %d\n", 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個位置\n", e, i + 1);
            return;
        }
    }
    printf("順序表中沒有%d這個元素!\n", e);
}

//顯示元素
void ListDisplay(SeqList *L)
{
    int i;
    for (i = 0; i < L->size; i++)
    {
        printf("%d\t", L->list[i]);
    }
    printf("\n");
}

//逆置順序表
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 ***\n");
    ListInit(&La);
    printf("請輸入線性表La的長度:");
    scanf("%d", &m);
    La.size = m;
    printf("請輸入線性表La中的元素(共%d個)\n", m);
    for (i = 0; i < m; i++)
    {
        scanf("%d", &La.list[i]);
    }
    printf("***  此時線性表La中的元素  ***\n");
    ListDisplay(&La);

    printf("*** 插入數據 ***\n");
    printf("請輸入要插入的位置:");
    scanf("%d", &i);
    printf("請輸入要插入的元素:");
    scanf("%d", &e);
    ListInsert(&La, i, e);
    printf("***  此時線性表La中的元素  ***\n");
    ListDisplay(&La);

    printf("*** 刪除數據 ***\n");
    printf("請輸入要刪除元素的位置:");
    scanf("%d", &i);
    ListDelete(&La, i);
    printf("***  此時線性表La中的元素  ***\n");
    ListDisplay(&La);

    printf("*** 查找數據 ***");
    printf("請輸入要查找的元素:");
    scanf("%d", &e);
    ListSearch(&La, e);

    printf("*** 順序表逆置 ***\n");
    ListReverse(&La);
    printf("***  此時線性表La中的元素  ***\n");
    ListDisplay(&La);

    printf("*** 初始化線性表Lb ***\n");
    ListInit(&Lb);
    printf("請輸入線性表Lb的長度:");
    scanf("%d", &n);
    Lb.size = n;
    printf("請輸入線性表Lb中的元素(共%d個)\n", n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &Lb.list[i]);
    }
    printf("***  此時線性表Lb中的元素  ***\n");
    ListDisplay(&Lb);

    printf("*** 合並線性表La 和 Lb ***\n");
    ListInit(&Lc);
    ListMerge(&La, &Lb, &Lc);
    printf("***  此時線性表Lc中的元素  ***\n");
    ListDisplay(&Lc);

    scanf("%d", &e);

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM