美文网首页
1.1 顺序表

1.1 顺序表

作者: 瓜尔佳Anthony | 来源:发表于2019-01-30 21:19 被阅读0次

顺序表,全名顺序存储结构,是线性表的一种。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。

顺序表的创建及增删改查等基本操作

#include "stdafx.h"

#define SIZE 5

// 顺序表
typedef struct Table {
    int * head; //声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length; //记录当前顺序表的长度
    int size;   //记录顺序表分配的存储容量
}table;

// 初始化顺序表
table initTable() {
    table t;
    t.head = (int*)malloc(SIZE * sizeof(int));
    if (!t.head) {
        printf("failed to initialize\n");
        exit(0);
    }
    t.length = 0;
    t.size = SIZE;
    return t;
}

// 输出顺序表中的元素
void displayTable(table t) {
    for (int i = 0; i < t.length; i++) {
        printf("%d, ", t.head[i]);
    }
    printf("\n");
}

//插入函数,其中,elem为插入的元素,add为插入到顺序表的位置
table insert(table t, int elem, int position) {
    if (position > t.length + 1 || position < 1) {
        printf("invalid position\n");
        return t;
    }
    if (t.length == t.size) {
        t.head = (int *)realloc(t.head, (t.size + 1) * sizeof(int));
        if (!t.head) {
            printf("failed to allocate\n");
            return t;
        }
        t.size += 1;
    }

    //插入操作,需要将从插入位置开始的后续元素,逐个后移
    for (int i = t.length - 1; i >= position - 1; i--) {
        t.head[i + 1] = t.head[i];
    }
    t.length += 1;
    t.head[position - 1] = elem;
    
    return t;

}

table delTable(table t, int position) {
    if (position > t.length || position < 1) {
        printf("invalid position\n");
        return t;
    }
    for (int i = position - 1; i < t.length - 1; i++) {
        t.head[i] = t.head[i + 1];
    }
    t.length -= 1;
    return t;
}

//查找函数,其中,elem表示要查找的数据元素的值
int select(table t, int elem) {
    for (int i = 0; i < t.length; i++) {
        if (t.head[i] == elem) {
            return i+1;
        }
    }
    return -1;
}

//更改函数,其中,elem为要更改的元素,newElem为新的数据元素
table update(table t, int elem, int newElem) {
    int position = select(t, elem);
    t.head[position - 1] = newElem;
    return t;
}

int main()
{
    table t = initTable();
    for (int i = 0; i < t.size; i++) {
        t.head[i] = i + 1;
        t.length++;
    }
    printf("顺序表中的元素:\n");
    displayTable(t);

    t = insert(t, 3, 3);
    printf("\n在3位置插入元素3后:\n");
    displayTable(t);

    t = delTable(t, 3);
    printf("\n删除3位置元素后:\n");
    displayTable(t);

    printf("\n查找元素3在位置:%d\n", select(t, 3));

    t = update(t, 3, 10);
    printf("\n将元素3修改为10:\n");
    displayTable(t);
    return 0;
}

相关文章

  • 1.1 顺序表

    顺序表,全名顺序存储结构,是线性表的一种。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储...

  • java数据结构与算法之顺序表与链表深入分析

    一、线性表的顺序存储设计与实现(顺序表) 1.1 顺序存储结构的设计原理概要 顺序存储结构底层是利用数组来实现的,...

  • 带头结点的链表

    1、链表和顺序表 链表是很常见的数据结构,链表总是会和线性顺序表来比较。 1.1、顺序表 具有随机存储的特性,给定...

  • P 数据结构 | 线性表:顺序表

    一、线性表 最基本的数据结构之一 根据线性表的实际存储方式,分为两种实现模型顺序表、链表 1.1 顺序表 将元素顺...

  • 数据结构知识点总结(更新ing)

    ⭐ 我的网站: www.mengyingjie.com ⭐ 1线性表 1.1线性表的基本操作 1.2线性表的顺序表...

  • [Postgres] 如何读懂执行计划:计划节点

    1. 扫描节点 1.1 Seq Scan 功能:基于堆表的顺序扫描 特点:适合于小表的查询操作,会产生顺序的磁盘访...

  • 线性表

    1.线性表 1.1 顺序表(顺序存储) 静态分配 动态分配 1.2 单链表 单链表定义 不带头节点的单链表插入操作...

  • 数据结构与算法-线性表的顺序存储结构

    1、顺序存储结构 1.1、顺序存储的定义 说这么多的线性表,我们来看看线性表的两种物理结构的第一种——顺序存储结构...

  • 数据结构实验1.1:顺序表

    实验内容: 1.输入一组整型元素序列(不少于10个),建立顺序表。2.在该顺序表中进行顺序查找某一元素,查找成功返...

  • 数据结构

    1 线性表 1.1 顺序存储结构 1.1.1 特点 查找的性能高 1.1.2 代表 ArrayList(java)...

网友评论

      本文标题:1.1 顺序表

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