顺序表的建立与基本操作

本文主要介绍顺序表的动态分配,插入,删除,查找操作

一,定义一个顺序表

typedef struct{
	int *data;    //指示动态分配数组的指针 
	int MaxSize;   //顺序表的最大容量
	int length;    //顺序表的当前长度 
}SeqList;

二,初始化一个顺序表

void InitList(SeqList &L){
	//用malloc 函数申请一片连续的存储空间
	L.data = (int *)malloc(InitSize*sizeof(int)); 
	L.length = 0;
	L.MaxSize = InitSize;
}

三,动态增加数组长度

//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
	int *p = L.data;
	L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));
	for(int i = 0;i<L.length;i++){
		L.data[i] = p[i];
	}
	L.MaxSize = L.MaxSize+len;
	free(p);
	
} 

四,插入操作

//插入操作
bool ListInsert(SeqList &L, int i, int e){
	if(i<1||i>L.length)
		return false;
	if(L.length>=L.MaxSize)
		return false;
	for(int j = L.length; j>=i; j--){
		L.data[j] = L.data[j-1];  //将第i及以后位置的元素向后移 
	}
	L.data[i-1] = e;
	L.length++;
	return true;
} 

五,删除操作

//删除操作(按位置删除)
bool ListDelete(SeqList &L, int i , int &e){
	if(i<1||i>L.length)
		return false;
	e = L.data[i-1];  //被删除的元素值 
	for (int j = i; j<L.length; j++)
		L.data[j-1] = L.data[j];   //将被删除元素后面的元素向前移
	L.length--;
	return true; 
	 
} 

六,按位查找操作

//按位查找
int GetElem(SeqList L,int i){
	if(i>0||i<L.length)
		return L.data[i-1];
	return -1;
} 

七,按值查找操作

//按值查找
int LocateElem(SeqList L,int e){
	for(int i=0;i<L.length;i++){
		if(L.data[i]==e)
			return i+1;
	}
	return -1;
} 

完整的代码结构,实现,函数调用流程可下载资源查看

 https://download.csdn.net/download/helloword111222/85660346

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 好的,我来回答你的问题。 建立一个顺序的Java代码示例如下: ```java public class SeqList<T> { private Object[] listArray; private int size; private int maxSize; public SeqList(int maxSize) { this.maxSize = maxSize; this.listArray = new Object[maxSize]; this.size = 0; } public boolean isEmpty() { return size == 0; } public boolean isFull() { return size == maxSize; } public int size() { return size; } public T get(int index) { if (index >= 0 && index < size) { return (T)listArray[index]; } else { return null; } } public boolean insert(int index, T element) { if (index < 0 || index > size || isFull()) { return false; } for (int i = size - 1; i >= index; i--) { listArray[i + 1] = listArray[i]; } listArray[index] = element; size++; return true; } public boolean remove(int index) { if (index < 0 || index >= size || isEmpty()) { return false; } for (int i = index; i < size - 1; i++) { listArray[i] = listArray[i + 1]; } listArray[size - 1] = null; size--; return true; } } ``` 这个代码定义了一个泛型类 `SeqList`,其中封装了一个数组 `listArray` 用于存储元素,以及其他一些方法,如 `isEmpty`、`isFull`、`size`、`get`、`insert` 和 `remove` 等。可以使用这个类来创建一个顺序对象并进行元素的添加、删除和查找等操作。 ### 回答2: 顺序是一种常见的线性数据结构,它可以用来存储一组具有相同数据类型的元素。在Java语言中,可以通过数组来实现顺序。 首先,我们需要定义一个顺序类,例如名为"SequentialList"的类。该类需要包含以下成员变量: - 一个数组,用于存储顺序的元素。 - 一个变量,用于记录顺序中已经存储的元素个数。 接下来,我们可以为该顺序类添加一些常用的方法,例如: - 添加元素:定义一个"add"方法,该方法可以接受一个元素参数,将该元素添加到顺序的末尾,并更新元素个数。 - 删除元素:定义一个"remove"方法,该方法可以接受一个索引参数,根据索引删除顺序中的元素,并更新元素个数。 - 获取元素:定义一个"get"方法,该方法可以接受一个索引参数,根据索引返回顺序中对应的元素。 - 修改元素:定义一个"set"方法,该方法可以接受一个索引参数和一个新值参数,根据索引修改顺序中对应的元素。 除了上述方法,我们还可以添加一些辅助方法,例如: - 获取顺序大小:定义一个"size"方法,用于返回顺序中元素的个数。 - 判断顺序是否为空:定义一个"isEmpty"方法,用于判断顺序是否为空。 最后,我们可以在"SequentialList"类的主方法中编写一些测试代码,以验证顺序的功能是否正确。 通过上述步骤,我们就可以使用Java语言建立一个简单的顺序。当然,实际应用中可能需要考虑一些其他的因素,例如扩容、索引越界等情况。但是,通过这个基本框架,我们可以进一步扩展和优化顺序的功能。 ### 回答3: 顺序是一种常见的数据结构,用于存储一组数据。在Java语言中,可以使用数组来模拟顺序的实现。 首先,我们需要定义一个顺序类,可以命名为SequentialList。该类应包含以下属性和方法: 1. 数据域data,用来存储顺序中的数据。这里可以使用数组来实现。 2. 大小size,用来记录顺序中元素的个数。 接下来,我们可以添加一些常用的方法来操作顺序,比如: 1. 构造方法:用来创建一个空的顺序对象。 2. 插入方法:在指定位置插入一个元素,需要考虑原有元素的后移。 3. 删除方法:删除指定位置的元素,需要考虑后续元素的前移。 4. 获取方法:获取指定位置的元素值。 5. 大小方法:获取顺序中元素的个数。 6. 清空方法:将顺序清空,使其变为空。 下面是一个简单的顺序示例代码: ``` public class SequentialList { private int[] data; private int size; public SequentialList() { data = new int[10]; // 假设顺序的初始长度为10 size = 0; } public void insert(int index, int value) { // 判断插入位置的有效性 if (index < 0 || index > size) { throw new IndexOutOfBoundsException("插入位置无效!"); } // 如果顺序已满,进行扩容 if (size == data.length) { int[] newData = new int[data.length * 2]; System.arraycopy(data, 0, newData, 0, size); data = newData; } // 将插入位置及之后的元素后移 for (int i = size; i > index; i--) { data[i] = data[i - 1]; } // 插入新元素 data[index] = value; size++; } public void remove(int index) { // 判断删除位置的有效性 if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("删除位置无效!"); } // 将删除位置之后的元素前移 for (int i = index; i < size - 1; i++) { data[i] = data[i + 1]; } size--; } public int get(int index) { // 判断获取位置的有效性 if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("获取位置无效!"); } return data[index]; } public int size() { return size; } public void clear() { size = 0; } } ``` 上面的代码只是一个简单的示例,实际的顺序实现可能还需要考虑更多的细节,比如动态扩容、异常处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢快的小太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值