前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >顺序表常用使用方法

顺序表常用使用方法

作者头像
张凝可
发布于 2019-08-22 03:03:30
发布于 2019-08-22 03:03:30
53800
代码可运行
举报
文章被收录于专栏:技术圈技术圈
运行总次数:0
代码可运行

复习了一些数据结构的东西,打算把常用的数据结构都实现一下,慢慢来,慢慢来 顺序表是用一组地址连续的存储单元依次存储线性表的数据元素。这里一般考虑的是有序的顺序表。因为如果C语言实现这种数据结构可以使用指针, 在JAVA中没有指针,用 对象,并且是用一种动态的数组ArrayList可以实现,但是没有用,增加内存方面不知道有什么比较好的解决方案。编码比较水,勤加练习~~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SqList {
	//顺序线性表
	private int length;
	private int listSize;
	private int incrementSize;
	private int[] elem;//存储整型数据的一维数组
	public SqList(int[] elem,int listSize,int incrementSize){
		/*this.elem = elem;
		this.length = length;
		this.length = this.elem.length;
		this.listSize = listSize;
		this.incrementSize = incrementSize;*/
		//这个地方貌似不能这样写
		this.listSize = listSize;
		this.elem = new int[this.listSize];//开辟空间的大小
		this.length = elem.length;
		for(int i=0;i<length;i++){
			this.elem[i]=elem[i];
			
		}
		this.incrementSize = incrementSize;
	}
	public SqList(int listSize,int incrementSize ){
		this.elem =new int[listSize];
		this.length = this.elem.length;
		this.listSize = listSize;
		this.incrementSize  = incrementSize;
		
	}
	public int getLength() {
		return length;
	}
	public void setLength(int length) {
		this.length = length;
	}
	public int getListSize() {
		return listSize;
	}
	public void setListSize(int listSize) {
		this.listSize = listSize;
	}
	public int getIncrementSize() {
		return incrementSize;
	}
	public void setIncrementSize(int incrementSize) {
		this.incrementSize = incrementSize;
	}
	public int[] getElem() {
		return elem;
	}
	public void setElem(int[] elem) {
		this.elem = elem;
	}
	public void increment(){
		
	}
	
	
	

}

下面就是对顺序表的查找、插入、删除、逆置、比较、元素互换、折半查找插入等基本方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package SqList_Operator;

import java.text.MessageFormat;

public class SqlList_Tool {
	
	//在有序顺序表上查找
	public static int localElem(SqList l,int elem){
		int index=0;
		int i=0;
		while(i<l.getElem().length&&l.getElem()[i++]!=elem);
		if(i<l.getLength()){
			index = i;
			
		}
		return index;
		
	}
	
	//在顺序表上插入
	public static void listInsert(SqList l,int elem){
		
		//在插入之前还要先判断当前的存储空间是否已满
		//在插入之前先打印出来原有的顺序表
	    SqlList_Tool.printSq(l);
		if(l.getLength()>=l.getListSize()){
			l.increment();
			
		}
		
		int j =l.getLength()-1;
		while(l.getElem()[j]>elem&&j>=0){
			l.getElem()[j+1]=l.getElem()[j];
			j--;
			
		}
		if(j>=0){
			l.getElem()[j+1]=elem;
			l.setLength(l.getLength()+1);
		}
		System.out.print("插入之后的顺序表为:");
		SqlList_Tool.printSq(l);
		
		
	}
	public static int  listDelete(SqList l,int i){
		int elem;
		//存在一个元素移动的过程,i之后的元素都要向前移动一个位置
		elem = l.getElem()[i-1];
		for(int j=i;j<l.getLength();j++){
			l.getElem()[j]=l.getElem()[j+1];
			
		}
		l.setLength(l.getLength()-1);
		SqlList_Tool.printSq(l);
		
		return elem;
		
	}
	//两个顺序表比较
	public static int compareList(SqList l1,SqList l2){
		int j=0;
		while(j<l1.getLength()&&j<l2.getLength()){
			if(l1.getElem()[j]>l2.getElem()[j])return 1;
			else if(l1.getElem()[j]<l2.getElem()[j])return -1;
			else j++;
			
		}//比如l1已经遍历完成,就不能判断了,就从列表的长度上得出结果
		if(l1.getLength()==l2.getLength())
			return 0;
		else if(l1.getLength()<l2.getLength())return -1;
		else return 1;
	
		
		
	}
	public static void exchangel(SqList l,int m,int n){
		//将l1中前m个元素与后n个元素互换
		int temp;
		for(int k=0;k<n;k++){
			temp = l.getElem()[m+k];
			for(int j=m+k-1;j>=k;j--){
				l.getElem()[j+1]=l.getElem()[j];
				
			}
			l.getElem()[k]=temp;
		}
		SqlList_Tool.printSq(l);
		
	}
	//在递增有序的顺序表中插入一个元素,首先要查询待插入元素的位置,因为顺序表元素递增有序,采用折半查找法
	public static void insertMiddel(SqList sq,int num,int elem){
		
		int low =0;
		int high = num-1;
		//num为顺序表中元素的个数
		int middle = 0;
		while(low<=high){
			middle =(low+high)/2;
			if(sq.getElem()[middle]==elem){
				low = middle+1;
			    break;
				
			}else if(sq.getElem()[middle]>elem){
				high = middle-1;
			}else{
				low = middle+1;
			}
			
		}
		//因为要进行插入,则将middle之后的
		for(int i=num;i>=low;i--){
			sq.getElem()[i+1] = sq.getElem()[i];
			
		}
		sq.getElem()[middle]=elem;
		SqlList_Tool.printSq(sq);
	}
	public static void printSq(SqList l){
		System.out.print("目前顺序表的长度为"+l.getLength());
		System.out.println();
		for(int i=0;i<l.getLength();i++){
			System.out.print(MessageFormat.format("在顺序表第{0}个位置的元素为{1}", i+1,l.getElem()[i]));
			System.out.println();
			
			
		}
		
	}
	

}

再接再厉,吼吼^O^

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年08月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构 第3讲 顺序表
顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入、删除时需要移动大量元素。
rainchxy
2018/09/13
5470
数据结构 第3讲 顺序表
《Java初阶数据结构》----2.<线性表---ArrayList与顺序表>
2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
用户11288958
2024/09/24
790
《Java初阶数据结构》----2.<线性表---ArrayList与顺序表>
【数据结构】顺序表
前言: 小编在开始之前就已经发了顺序表的相关用例,想看的小伙伴可以去看看哦http://t.csdnimg.cn/saIbn
用户11288949
2024/09/24
690
【数据结构】顺序表
数据结构-2.顺序表
线性是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表有: 顺序表 , 链表 , 栈 , 队列...
用户11369350
2024/11/19
430
数据结构-2.顺序表
数据结构——顺序表
基本概念和术语 数据:客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如:整数、实数、字符串、图形、图像、声音等经过特殊编码后的数据。 数据元素:数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。(数据元素也称为元素、记录等)。数据元素用于完整地描述一个对象,如:学生记录、树中棋盘的一个格局、图中的一个顶点等。 数据项:组成数据元素的、有独立含义的、不可分割的最小单位。例如:学生基本信息表中的学号、姓名、性别等。 数据对象:性质相同的数据元素的集合,是数据的一个子集。(只要
ruochen
2021/06/28
7210
数据结构——顺序表
顺序表基础操作--练习
顺序表基础操作 存入并顺序打印数字 //最近修改:9/21,添加插入和删除多个数字 //9/22,修改,范围问题 测试图如下: #include<stdio.h> #include<st
Enterprise_
2019/02/21
4520
【数据结构】ArrayList与顺序表
---- 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。 2.顺序表 2.1接口的实现 我们先自己来完成一个顺序表8:  具体效果如图: 源码如下: 建议小伙伴们自己思考一下上手敲一敲代码,对后续的学习可以更好的理解哟~ MyArr
xxxflower
2023/04/16
1990
【数据结构】ArrayList与顺序表
顺序线性表
线性表的顺序表示和实现 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 线性表的第一个数据元素a1的存储位置,通常称作线性表的起始位置或基地址。 只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。 数组类型有随机存取的特性,因此通常都用数组来描述数据接哦故中的顺序存储结构。由于线性表的长度可变,且所需最大存储空间随问题不同而不同,在C语言中可用动态分配的一维数组,如下描述。 /* 线性表的动态分配顺序存储结构 */
猿人谷
2018/01/17
7700
顺序线性表
C语言--顺序表的实现
#include<stdio.h> #define list_init_size 100 typedef struct{ int data[list_init_size]; int length; }Seqlist; void creat(Seqlist &L);//建立线性表 void show(Seqlist L);//显示线性表 void insert(Seqlist &L,int position,int e); //插入数据e,位置为position void so
王也518
2022/10/26
1.5K0
关于顺序表的C语言实现
严蔚敏老师的教材里用到引用传值,纯C语言无法实现,只能用CPP文件去编译,为此,特意将引用传值改为了指针作为参数。上例实现了创建、初始化、插入的封装。
休辞醉倒
2019/07/23
1.6K0
线性表的顺序存储
线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称为线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表(Sequential List)。
老齐
2023/03/02
1.7K0
线性表的顺序存储
线性表的顺序表示和实现(参考严蔚敏版)
在顺序表中,删除一个元素和插入一个元素的操作非常相似。删除一个元素即是将i位置之后的所有元素向前移一位。
跋扈洋
2021/05/19
8480
线性表的顺序表示和实现(参考严蔚敏版)
线性表(顺序存储结构)
我的想法很简单,只需要从左向右扫描比基准小于等于的数和从右向左扫描大于基准的数,当扫描到则立刻交换,继续扫描,直到两个扫描的标杆相遇。
废江_小江
2022/09/05
7190
数据结构-线性表顺序存储
由n(n>=0)个数据特性相同的元素构成的有限序列称为线性表,(n=0)的时候称为空表。 一个数据元素可以是简单的一个数据,一个符号,也可以是复杂的若干个数据项的组合
姓王者
2024/11/04
1080
数据结构 || 顺序表
1.代码存在逻辑错误,即算法的设计思路不能完美实现删除的需求。 2.算法的效率很低,会浪费很多的时间。
用户10271432
2022/12/19
4590
数据结构 || 顺序表
顺序表练习——C++学生信息管理系统
C++顺序表简单实现学生信息管理系统,未加入文件输入输出流,界面较简单,编译通过 #include<stdlib.h> #include<string> #include<iostream> #include<iomanip> using namespace std; #define MAXSIZE 100 #define OVERFLOW -2 #define ERROR -1 #define OK 1 typedef int Status; typedef struct { string Nam
ruochen
2021/05/18
1.2K0
顺序表练习——C++学生信息管理系统
数据结构 之 顺序表 ArrayList (Java)
常见的线性表有:顺序表(ArrayList),链表(LinkedList),栈(Stack),队列(Queue)...
AUGENSTERN_
2024/04/09
1200
数据结构 之 顺序表 ArrayList (Java)
数据结构:线性表之顺序存储结构
该文是关于数据结构中线性表类型的一个程序,主要介绍了顺序存储结构的特点,以及其相关的操作,如插入、删除、查找等,并举例说明。
s1mba
2018/01/03
7490
数据结构:线性表之顺序存储结构
数据结构 线性表操作
该文介绍了数据结构中线性表的基本操作,包括插入、删除、查找和输出操作。还介绍了顺序表的概念以及实现这些操作的基本代码。
Kindear
2018/01/03
5580
用c语言实现顺序表_顺序表代码讲解以及实现
1、 创建顺序表 2、 按数值查找 3、 按位置查找 4、 插一个数值 5、 删一个数值 6、 销毁顺序表 7、 求前驱算法 8、 求后继算法
全栈程序员站长
2022/11/15
1.9K0
相关推荐
数据结构 第3讲 顺序表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验