zoukankan      html  css  js  c++  java
  • 顺序表的基本操作(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("顺序表已满,无法插入!
    ");
        }
        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	", 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);
    
    }
  • 相关阅读:
    div+css 兼容 ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法
    cocos2dx Error:不允许使用继承成员
    NSKeyedArchiver和NSKeydUnarchiver
    Undefined symbols for architecture i386: _OBJC_CLASS_$_SKPSMTPMessage", referenced from: error
    WBShareKit
    PHP(二)
    cocos2d从Url获得图片数据创建CCSprite
    iPhone获取设备的相关信息
    python发人人状态
    [WARN]Warning: Multiple build commands for output file /
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3382281.html
Copyright © 2011-2022 走看看