数据结构-顺序表的顺序存储
定义:
- 用一组地址连续的存储单元依次存储线性表中每个数据元素,这种存储结构称为线性表的顺序存储结构,用这种结构表示的线性表称为顺序表。
特点:
- 用数据元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系。
存储位置:
线性表中第i个数据元素ai的存储位置
线性表的顺序存储结构为随机存储结构
存储结构内存视图
代码表示:
- 顺序表的插入
/*** 顺序表的插入** @param arr 数组* @param pos 插入的位置* @param value 插入的值* @return*/public static boolean listInsert(int[] arr, int pos, int value) {if (arr.length > MaxSize) {System.out.println("顺序表已满,无法继续插入数据!");return false;}if (pos < 1 || pos > arr.length + 1) {System.out.println("插入数据的位置无效,无法插入");return false;}// 因为在java中数组的大小不能动态变化的,所以只能使用新数组int[] newArr = new int[arr.length + 1];for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}for (int i = newArr.length - 1; i >= pos; i--) {newArr[i] = newArr[i - 1];}newArr[pos - 1] = value;listTraverse(newArr);return true;}
- 顺序表的删除
/*** 顺序表的删除** @param arr 数组* @param pos 删除的位置* @param value 删除的值* @return*/public static boolean listDelete(int[] arr, int pos, int value) {if (arr.length == 0) {System.out.println("顺序表为空表,无法删除");return false;}if (pos < 1 || pos > arr.length) {System.out.println("删除的位置无效");return false;}for (int i = pos - 1; i < arr.length; i++) {if (i != arr.length - 1) {arr[i] = arr[i + 1];}}arr[arr.length - 1] = 0;listTraverse(arr);return true;}
- 获取顺序表上指定位置上的值
/*** 获取顺序表上指定位置上的值** @param arr 数组* @param pos 元素的位置* @return*/public static int listFindByPos(int[] arr, int pos) {if (pos < 1 || pos > arr.length) {System.out.println("获取的位置无效");return -1;}return arr[pos - 1];}
- 获取顺序表上指定元素的位置
/*** 获取顺序表上指定元素的位置** @param arr 数组* @param value 查找的值* @return*/public static int listFindByValue(int[] arr, int value) {if (arr.length == 0) {System.out.println("顺序表为空表,无法获取元素的位置");return -1;}for (int i = 0; i < arr.length; i++) {if (arr[i] == value) {return i + 1;}}return -1;}
- 遍历顺序表
/*** 遍历顺序表** @param arr 数组*/public static void listTraverse(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}System.out.println();}
- main方法
public static void main(String[] args) {// 固定演示的数组的长度int[] arr = new int[7];// 添加测试的数据testData(arr);// 遍历listTraverse(arr);// 插入数据listInsert(arr, 3, 100);// 删除数据//listDelete(arr, 3, 50);// 获取指定位置的值System.out.println(listFindByPos(arr, 5));System.out.println(listFindByValue(arr, 20));System.out.println();}public static void testData(int[] arr) {arr[0] = 30;arr[1] = 10;arr[2] = 50;arr[3] = 20;arr[4] = 60;arr[5] = 70;arr[6] = 90;}
demo代码:
package test;public class Test {private static final int MaxSize = 20;public static void main(String[] args) {// 固定演示的数组的长度int[] arr = new int[7];// 添加测试的数据testData(arr);// 遍历listTraverse(arr);// 插入数据listInsert(arr, 3, 100);// 删除数据//listDelete(arr, 3, 50);// 获取指定位置的值System.out.println(listFindByPos(arr, 5));System.out.println(listFindByValue(arr, 20));System.out.println();}public static void testData(int[] arr) {arr[0] = 30;arr[1] = 10;arr[2] = 50;arr[3] = 20;arr[4] = 60;arr[5] = 70;arr[6] = 90;}/*** 顺序表的插入** @param arr 数组* @param pos 插入的位置* @param value 插入的值* @return*/public static boolean listInsert(int[] arr, int pos, int value) {if (arr.length > MaxSize) {System.out.println("顺序表已满,无法继续插入数据!");return false;}if (pos < 1 || pos > arr.length + 1) {System.out.println("插入数据的位置无效,无法插入");return false;}// 因为在java中数组的大小不能动态变化的,所以只能使用新数组int[] newArr = new int[arr.length + 1];for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}for (int i = newArr.length - 1; i >= pos; i--) {newArr[i] = newArr[i - 1];}newArr[pos - 1] = value;listTraverse(newArr);return true;}/*** 顺序表的删除** @param arr 数组* @param pos 删除的位置* @param value 删除的值* @return*/public static boolean listDelete(int[] arr, int pos, int value) {if (arr.length == 0) {System.out.println("顺序表为空表,无法删除");return false;}if (pos < 1 || pos > arr.length) {System.out.println("删除的位置无效");return false;}for (int i = pos - 1; i < arr.length; i++) {if (i != arr.length - 1) {arr[i] = arr[i + 1];}}arr[arr.length - 1] = 0;listTraverse(arr);return true;}/*** 获取顺序表上指定位置上的值** @param arr 数组* @param pos 元素的位置* @return*/public static int listFindByPos(int[] arr, int pos) {if (pos < 1 || pos > arr.length) {System.out.println("获取的位置无效");return -1;}return arr[pos - 1];}/*** 获取顺序表上指定元素的位置** @param arr 数组* @param value 查找的值* @return*/public static int listFindByValue(int[] arr, int value) {if (arr.length == 0) {System.out.println("顺序表为空表,无法获取元素的位置");return -1;}for (int i = 0; i < arr.length; i++) {if (arr[i] == value) {return i + 1;}}return -1;}/*** 遍历顺序表** @param arr 数组*/public static void listTraverse(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}System.out.println();}
}
数据结构-顺序表的顺序存储相关推荐
- 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)
顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...
- 数据结构--顺序表--史上最全--王道考研笔记
顺序表 定义 顺序表采用顺序存储方式,是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系 第n个元素 第n个元素的存放位置 ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- 数据结构-顺序表(动态分配存储空间)
数据结构-顺序表(动态分配存储空间) (1)顺序表的结构定义: 结构型定义:(动态分配存储空间) /*** 动态分配存储空间*/ #define InitSize 100 //动态分配存储空间时,不限 ...
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)
C语言/C++常见习题问答集锦[八十三]之数据结构顺序表{operand types are error: no match for "operator=="} 程序之美 前言 主 ...
- 数据结构--顺序表的使用
数据结构--顺序表的使 #include<iostream> #include<cstdio> #include<cstring> using namespace ...
- Educoder头歌数据结构顺序表及其应用
头歌实践平台答案educoder 数据结构-顺序表及其应用 第1关:顺序表的实现之查找功能 /***************************************************** ...
- 数据结构——顺序表的合并
数据结构--顺序表的合并 具体要求:写一个函数,其函数的功能是将非递增顺序表LA和LB合并到非递增顺序表LC中 数据结构-顺序表的操作之合并顺序表 一.顺序表的结构 首先要定义的是顺序表的结构体,只有 ...
最新文章
- HTTP POST慢速DOS攻击初探
- JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇
- 如何在android客户端中做到自动检查数据更新?,UpdateHelper
- idea卸载不干净怎么办_fxfactory卸载不干净?Fxfactory及插件卸载教程
- CNSA与CASC和CASIC的区别
- 程序员,你总要有点自己的想法吧!
- 了解过Vintage的N种样式?
- pytorch1.0神经网络保存、提取、加载
- 浅说position定位及z-index使用
- matlab电容式传感器仿真,差动电容式位移传感器的仿真研究
- python下载后在哪打开_centos6/7系统的自带的python安装在哪里?
- vue cl3、vuex、vue-router、ant design vue、axios搭建一个简易的单页面应用
- C/C++程序员工作面试的秘密
- Scrum大白话总结
- Docker内时区查询和修改方法
- Contest 20140914 Mushroom写情书 字符串雙hash 後綴數組
- 10bit为什么比8bit节省带宽
- leetcode动态规划之零钱兑换问题
- html加了文档声明之后页面错乱,PDF转成HTML排版错乱?教你一招完美转换
- 解决shapes (none,111) and (none,111) are incompatible