美文网首页
线性表的顺序存储

线性表的顺序存储

作者: 张子涵97 | 来源:发表于2018-05-03 09:46 被阅读0次

一、概念

线性表的顺序存储指的是用一组地址连续的存储单元依次存储线性表的数据结构。

——《数据结构》C语言版

简而言之,也就是编程语言中常见的数组Array。

图1-1
如图1-1所示:在地址为0X001的内存空间中存放数据a,在0X002中存放数据b。。。
0X001,0X002,0X003,0X004是连续的。

二、代码

#include<stdio.h>
#include<stdlib.h>

//宏定义结构体
typedef struct Array{
    int * pbase; //首地址
    int len; //总长度
    int cnt; //当前长度
}ARRAY;

//数组初始化
void arr_init(ARRAY * pArr, int length){
    //动态分配内存
    pArr->pbase = (int *)malloc(sizeof(int)*length);
    //是否分配成功
    if(pArr->pbase == NULL){
        printf("内存分配失败\n");
        exit(-1);
    }
    //初始化长度
    pArr->len = length;
    pArr->cnt = 0;
}

//数组是否为空
bool arr_isEmpty(ARRAY * pArr){
    //true是,false不是
    if(pArr->cnt == 0)
        return true;
    else
        return false;
}

//数组遍历
void arr_show(ARRAY * pArr){
    //数组是否为空
    if(arr_isEmpty(pArr) == true)
        printf("数组为空\n");
    else{
        //不为空,则遍历数组
        for(int i=0; i<pArr->cnt; i++){
            printf("%d\n", pArr->pbase[i]);
        }
    }
}

//数组追加
bool arr_append(ARRAY * pArr, int value){
    //数组是否满员
    if(pArr->cnt < pArr->len){
        //没满,则追加一个数据
        pArr->pbase[pArr->cnt] = value;
        pArr->cnt++;
        return true;
    }
    else
        //满了,则放弃该操作
        return false;
}

//数组删除
bool arr_delete(ARRAY * pArr, int index){
    //判断索引
    if(index < 1 || index > pArr->cnt){
        printf("没有序号小于1或大于%d的数据\n", pArr->cnt);
        return false;
    }
    else{
        //对应数据存在,则删除
        for(int i=index; i<pArr->cnt; i++){
            pArr->pbase[i-1] = pArr->pbase[i];
        }
        pArr->cnt--;
        return true;
    }
}

//数组修改
bool arr_alter(ARRAY * pArr, int index, int value){
    //判断索引
    if(index < 1 || index > pArr->cnt){
        printf("没有序号小于1或大于%d的数据\n", pArr->cnt);
        return false;
    }
    else{
        //对应数据存在,则修改
        pArr->pbase[index] = value;
        return true;
    }
}

//数组查找
bool arr_find(ARRAY * pArr, int value){
    //判断要查找的值
    for(int i=0; i<pArr->cnt; i++){
        if(pArr->pbase[i] == value){
            printf("找到了%d\n", value);
            return true;
        }
    }
    printf("没找到%d\n", value);
    return false;
    
}

//数组排序
void arr_sort(ARRAY * pArr){
    //冒泡排序(升序),最多(cnt-1)!次
    //注意:i=1,因为最后一个数据的索引是cnt-1
    for(int i=1; i<pArr->cnt; i++){
        for(int j=0; j<pArr->cnt-i; j++){
            if(pArr->pbase[j] > pArr->pbase[j+1]){
                //临时变量,用于置换
                int temp = pArr->pbase[j];
                pArr->pbase[j] = pArr->pbase[j+1];
                pArr->pbase[j+1] = temp;
            }
        }
    }
}

//数组逆序
void arr_invert(ARRAY * pArr){
    //反转每一个元素
    //注意:i < cnt/2,因为最多cnt/2次
    for(int i=0; i < pArr->cnt/2; i++){
        //临时变量,用于置换
        int temp = pArr->pbase[i];
        //因为一开始i=0,所以cnt-1-i
        pArr->pbase[i] = pArr->pbase[pArr->cnt-1-i];
        pArr->pbase[pArr->cnt-i-1] = temp;
    }
}

//主函数
int main(void){
    ARRAY arr;//声明数组
    //调用API
    arr_init(&arr,5);
    arr_append(&arr,5);
    arr_append(&arr,4);
    arr_append(&arr,3);
    arr_append(&arr,2);
    arr_append(&arr,1);
    //arr_delete(&arr,2);
    //arr_alter(&arr,1,10);
    arr_sort(&arr);
    arr_invert(&arr);
    arr_show(&arr);
    //arr_find(&arr,4);

    return 0;
}

相关文章

  • 线性链表

    线性链表 线性表的顺序存储结构:顺序表线性表的链式存储结构:线性链表 线性表的链式存储所占存储空间大于顺序存储。 ...

  • 数据结构之线性表的链式存储结构

    之前写了线性表的顺序存储结构和有序线性表的顺序存储结构,今天接着写线性表的链式存储结构 数据结构之线性表的顺序存储...

  • 数据结构之有序线性表的链式存储结构

    之前写了线性表的顺序存储结构和有序线性表的顺序存储结构以及线性表的链式存储结构,今天接着写有序线性表的链式存储结 ...

  • 数据结构与算法(二)--- 单向循环链表

    线性表 线性表分为顺序存储结构和链式存储结构 存储方式 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素;...

  • 数据结构和算法之一——线性表_2_顺序结构存储

    线性表存储结构分类线性表有两种物理存储结构:1)顺序存储结构;2)链式存储结构 顺序存储结构2.1定义:线性表的顺...

  • 数据结构——顺序表

    顺序表:采用顺序存储方式的线性表称为顺序表 顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素,...

  • 线性表--顺序存储结构

    一、线性表的顺序存储结构 线性表有两种物理存储结构:顺序存储结构和链式存储结构。 顺序存储结构 ①定义:用一段地址...

  • 线性表及应用

    线性表 “线性表(List):零个或多个数据元素的有限序列。” 线性表的顺序存储结构 线性表的顺序存储结构,指的是...

  • 数据结构之线性表

    线性表 线性表:零个或多个数据元素的有限序列线性表的两种存储结构:顺序存储&链式存储 单链表结构&顺序存储结构对比...

  • 记录十一 线性表的链式存储结构

    前言 在前面记录八 线性表的顺序存储结构和记录九 线性表的顺序存储结构扩展(动态顺序表)中我们了解到线性表的顺序存...

网友评论

      本文标题:线性表的顺序存储

      本文链接:https://www.haomeiwen.com/subject/zgckrftx.html