• 数据结构 顺序表笔记


    /*
    顺序表示的线性表——顺序表
    定义:线性表是由n个相同类型的数据元素组成的有限序列。线性表的数据
    元素具有序偶关系,即数据元素之间具有一定次序。 
    线性表按照储存方式可以分成顺序储存和链式储存。线性表的顺序储存是指
    将线性表中的元素储存在一组连续的储存单元中。例如数组。 
    顺序表的特点有:逻辑上相邻的元素在物理上也是相邻的。线性表的顺序储
    存结构是一种随机存取的储存结构。 
    */ 
    // 以整型数据储存为例
    
    # include <stdio.h>
    # include <malloc.h>
    # include <stdlib.h>
    
    // 储存结构 
    struct arry 
    {
        int * p;        // 数组第一个元素地址 
        int len;        // 数组长度 
        int cnt;        // 数组有效数字个数 
    };
    
    void Create_Arry(struct arry *);              // 数组的创建 
    void Init_Arry(struct arry *);                // 数组的初始化 
    void Arry_Input(struct arry *);               // 数组数据的输入
    void Show_Arry(struct arry *);                // 数组的遍历
    bool Is_Empty(struct arry *);                 // 判断数组是否为空
    bool Is_Full(struct arry *);                  // 判断数组是否满 
    void Delete_Arry(struct arry *, int);         // 删除数组元素 
    void Destory_Arry(struct arry *);             // 数组的销毁 
    void Add_Arry(struct arry *, int);            // 追加元素 
    void Find_In_Arry(struct arry *, int);        // 在数组中查找某个元素 
    
    int main(void)
    {
        struct arry arr;
        // 数组的创建 
        Create_Arry(&arr);
        // 数组的初始化
        Init_Arry(&arr); 
        // 数组数据的输入
        Arry_Input(&arr);
        // 数组遍历
        Show_Arry(&arr);
        
        int pos;
        printf("请输入您想要销毁的元素位置:");
        scanf("%d", &pos);
        Delete_Arry(&arr, pos);
        Show_Arry(&arr);
        
        int val;
        printf("请输入您想要追加的元素的值:");
        scanf("%d", &val);
        Add_Arry(&arr, val);
        Show_Arry(&arr);
        
        int i;
        printf("请输入您想查找的值!
    ");
        scanf("%d", &i);
        Find_In_Arry(&arr, i);
        
        Destory_Arry(&arr);
        
        return 0;
    } 
    
    
    // 数组的创建 
    void Create_Arry(struct arry * arry)
    {
        printf("请输入您需要的数组最大长度:");
        scanf("%d", &arry->len);
        arry->p = (int *)malloc((arry->len) * sizeof(int));
        
        return;
    }
    
    // 数组的初始化
    void Init_Arry(struct arry * arr)
    {
        arr->cnt = 0;
        
        return;
    }
     
    
    // 数组数据的输入
    void Arry_Input(struct arry * arry)
    {
        int cnt;
        printf("请输入您想赋值的元素个数:");
        scanf("%d", &cnt);
        if (cnt > arry->len)
        {
            printf("您需要输入的数值的个数大于数组长度,输入失败!
    ");
            exit(-1);
        }
        int i;
        for (i = 0; i < cnt; ++i)
        {
            printf("请输入第%d个数组元素的值:", i+1);
            scanf("%d", &arry->p[i]);
        } 
        arry->cnt = cnt;
        
        return;
    }
    
    // 数组的遍历
    void Show_Arry(struct arry * arry)
    {
        if (Is_Empty(arry))
            printf("数组为空,无数据可输出!
    ");
        else
        {
            int i;
            for (i = 0; i < arry->cnt; ++i)
            {
                printf("%d
    ", arry->p[i]);
            }
            printf("
    ");
        } 
        
        return;
    }
    
    // 判断是否为空
    bool Is_Empty(struct arry * arry)
    {
        if (0 == arry->cnt)
            return true;
        else
            return false;
    }
    
    // 判断数组是否满
    bool Is_Full(struct arry * arry)
    {
        if (arry->cnt == arry->len)
            return true;
        else
            return false;
    }
    
    // 销毁数组中某个元素 
    void Delete_Arry(struct arry * arry, int pos)
    {
        int val;
        if (pos > arry->cnt+1)
        {
            printf("数组中不存在该元素!
    ");
            exit(-1);
        }
        val = arry->p[pos-1]; 
        for (int i = pos-1; i < arry->cnt; ++i)
            arry->p[i] = arry->p[i+1];
        
        // 销毁某个元素后,有效数字个数要减一
        arry->cnt -= 1; 
        printf("销毁成功,您销毁的元素是%d
    ", val);
        
        return;
    } 
    
    // 追加元素 
    void Add_Arry(struct arry * arry, int val)
    {
        if (Is_Full(arry))
        {
            printf("数组已满,无法再添加元素!
    ");
            exit(-1);
        }
        arry->p[arry->cnt] = val;
        arry->cnt += 1;
        
        return;
    }
    
    // 在数组中查找某个元素 
    void Find_In_Arry(struct arry * arry, int val)
    {
        int pos;
        for (pos = 0; pos < arry->cnt; ++pos)
        {
            if (val == arry->p[pos])
                break;
        }
        if (pos = arry->cnt)
        {
            printf("您查找的数值不存在!
    ");
            exit(-1);
        }
        else
            printf("您查找的元素在数组的第%d位!
    ", pos+1);
        
        return;
    }                  
    
    // 数组的销毁 
    void Destory_Arry(struct arry * arry)
    {
        free(arry->p);
        arry->p = NULL;
        
        return;
    }
  • 相关阅读:
    Hadoop 的版本问题
    SSH 端口转发原理
    KM算法
    最大流算法小结
    pku 2195 KM算法求最小权二分匹配
    SAP(最短增广路算法) 最大流模板
    最大流模板
    pku 1459 最大流 SAP
    pku Drainage Ditches 简单最大流 直接套模板 注意可能有重边
    推荐:吴军 谷歌黑板报 《浪潮之颠》
  • 原文地址:https://www.cnblogs.com/lnlin/p/6718338.html
Copyright © 2020-2023  润新知