顺序表的学习

本文介绍了线性表的顺序存储结构,通过一维数组实现,并详细阐述了顺序表的插入、删除和查阅操作。插入操作从表尾开始,删除操作则涉及节点移动。代码示例展示了在C语言中如何实现这些操作,并提供了主函数进行演示。

线性表的顺序存储结构:

一段地址连续的存储单元依次存储线性表的数据元素,可以用一维数组来实现顺序存储结构,线性表不能超过存储容量(数组的长度);

顺序表的描述三属性:

1、存储空间的起始位置

2、表的最大存储容量(数组的长度)

3、线性表的当前长度

应当遵循的是:当前长度 < = 存储容量

顺序表结构的操作(插入、删除、查阅)

插入操作从表尾开始到要插入的位置(包括),节点往后移动,最后记得表长度加1

void charu(int n,int data)
{
	int j;
	if(n<1 || (n>sp.listw+1) || (sp.listw>=sp.listmax))//当插入的位置比1小 或 插入的位置远远超过表尾 或 表尾已经是表的最大值时
	{
		printf("非法!\n");
		return;
	}
	else if((n==sp.listw+1) && (sp.listw<sp.listmax))//当插入的位置是表尾且表尾小于表的最大值时
	{
		sp.num[n-1]=data;//将数据写到表尾
		sp.listw++;//表尾加一
		return;
	}
	else//当插入的位置不是表尾且不是非法的位置时
	{
		for(j=sp.listw-1;j>=n-1;j--)//将人数数的习惯变为数组的下标,从表尾开始
		{
			sp.num[j+1]=sp.num[j];//往后移动
		}
		sp.num[n-1]=data;
		sp.listw++;
	}
}

删除的操作则是从要删除的位置往后一个节点开始到表尾(包括),往前移动,最后表尾减1

void shanchu(int n)
{
	int j;
	if((n<1) || (n>sp.listw))//删除的位置比1小或者大于表尾时
	{
		printf("非法!\n");
		return;
	}
	else if(n==sp.listw)//当删除的位置是表尾
	{
		sp.num[n-1]=0;
		sp.listw--;
		return;
	}
	else//当删除的位置不是表尾且不是非法的位置时
	{
		for(j=n;j<=sp.listw-1;j++)//将人数数的习惯变为数组的下标,从删除的位置下一个开始
		{
			sp.num[j-1]=sp.num[j];
		}
		sp.listw--;
	}
}

查阅

int chayue(int n)
{
	int m;
	if((n<1) || (n>sp.listw))
	{
		printf("非法!\n");
		return;
	}
	else
	{
		m=sp.num[n-1];
		return m;
	}
}

总和

#include<stdio.h>
typedef struct studen
{
	int num[10];
	int listw;//表尾长度
	int listmax;//表的空间最大值
}splist;
splist sp;
void xianshi()
{
	int i;
	for(i=0;i<sp.listw;i++)
	{printf("%d ",sp.num[i]);}
	putchar('\n');
	printf("********************************************\n");
}
void write()
{
	int i;
	for(i=0;i<5;i++)
	{
		sp.num[i]=i;
	}
	sp.listw=i;
	sp.listmax=10;
	return;
}
void charu(int n,int data)
{
	int j;
	if(n<1 || (n>sp.listw+1) || (sp.listw>=sp.listmax))//当插入的位置比1小 或 插入的位置远远超过表尾 或 表尾已经是表的最大值时
	{
		printf("非法!\n");
		return;
	}
	else if((n==sp.listw+1) && (sp.listw<sp.listmax))//当插入的位置是表尾且表尾小于表的最大值时
	{
		sp.num[n-1]=data;//将数据写到表尾
		sp.listw++;//表尾加一
		return;
	}
	else//当插入的位置不是表尾且不是非法的位置时
	{
		for(j=sp.listw-1;j>=n-1;j--)//将人数数的习惯变为数组的下标,从表尾开始
		{
			sp.num[j+1]=sp.num[j];//往后移动
		}
		sp.num[n-1]=data;
		sp.listw++;
	}
}
void shanchu(int n)
{
	int j;
	if((n<1) || (n>sp.listw))//删除的位置比1小或者大于表尾时
	{
		printf("非法!\n");
		return;
	}
	else if(n==sp.listw)//当删除的位置是表尾
	{
		sp.num[n-1]=0;
		sp.listw--;
		return;
	}
	else//当删除的位置不是表尾且不是非法的位置时
	{
		for(j=n;j<=sp.listw-1;j++)//将人数数的习惯变为数组的下标,从删除的位置下一个开始
		{
			sp.num[j-1]=sp.num[j];
		}
		sp.listw--;
	}
}
int chayue(int n)
{
	int m;
	if((n<1) || (n>sp.listw))
	{
		printf("非法!\n");
		return;
	}
	else
	{
		m=sp.num[n-1];
		return m;
	}
}
void main()
{
	int cha_yue;
	printf("建立的顺序表为:");
	write();
	xianshi();
	printf("插入第二后的顺序表为:");
	charu(2,99);//在第二个位置插入99
	xianshi();
	printf("删除第二后的顺序表为:");
	shanchu(2);//删除位置为2
	xianshi();
	printf("查阅第二的数据为:");
	cha_yue=chayue(2);
	printf("%d\n",cha_yue);
}

### Java顺序表学习教程 对于希望深入理解Java顺序表的新手而言,掌握线性数据结构的基础至关重要。顺序表是一种基于数组实现的数据结构,在内存中占用连续的空间[^1]。 #### 什么是顺序表顺序表是线性表的一种存储表示方法,其特点是逻辑上相邻的元素在物理位置上也相邻。这种特性使得顺序表支持随机访问任意位置上的元素,时间复杂度为O(1),而插入和删除操作则相对较为耗时,平均情况下需要移动一半以上的元素来保持序列的连续性[^2]。 #### 创建简单的顺序表类 为了更好地理解和实践顺序表的概念,下面提供了一个简化版的`SeqList`类定义: ```java public class SeqList { private int maxSize; // 表的最大容量 private Object[] elements;// 存储元素的一维数组 private int currentSize; // 当前实际长度 public SeqList(int size){ this.maxSize = size; this.elements = new Object[maxSize]; this.currentSize = 0; } // 插入新元素到指定索引处 public boolean insertElementAt(Object obj, int index){ if(index<0 || index>currentSize||currentSize>=maxSize)return false; for(int i=currentSize;i>index;i--){ elements[i]=elements[i-1]; } elements[index]=obj; ++this.currentSize; return true; } } ``` 此代码片段展示了如何创建一个基本的顺序列表对象,并实现了向特定位置插入元素的功能。需要注意的是,这里仅提供了部分功能作为示例;完整的顺序表应该还包括获取、更新以及移除元素等功能[^3]。 #### 练习建议 通过编写更多涉及顺序表的操作函数来进行练习是非常有益的。例如尝试自己动手实现以下几种常见操作: - 获取某个下标的值 - 更新某一下标的值 - 删除最后一个元素 - 查找给定值首次出现的位置 这些练习有助于巩固对顺序表的理解并提高编程技能[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值