(第一章一一线性表)第一节线性表顺序存储

线性表第一节 顺序存储结构的一些操作

今天开启数据结构的学习,介绍内容不多说,只是简单概要一下。主要还是想要记录一下学习过程以及学习中手敲的一些代码。可能会有一些错误,希望各位大佬能指正一下。

线性表定义:零个或者多个数据元素的有限序列。
线性表的抽象数据类型定义如下:

ADT:线性表(list)
data
线性表的数据对象集合为{a1,a2,…an},每个元素的类型均为datatype,其中除第一个元素a1和最后一个元素an外每一个元素有且只有一个前驱后继,数据元素都是一一对应的关系
操作
InitList(*L):初始化操作,建立一个空的线性表L。
ListEmpty(L):判断一个线性表是否为空,为空返回真,否则返回假。
ClearList(*L):线性表清空。
GetElem(L,I,*e):线性表L中的第I个元素值返回给e
LocateEleme(L,e):线性表L中查找与给定e元素相等的元素,如果查找成功,返回该元素在表中序号,否则返回0表示失败。
ListInsert(*L,I,e):线性表第i个位置插入新元素e
ListDelete(*L,I,*e):删除线性表第i个元素,并用e返回其值
ListLength(L):返回线性表的长度

上代码操作

#include<iostream>
using namespace std;
#include<string>
#define MAXSIZE 20
#define error 0
#define ok 0

//定义线性表类
struct Sqlist
{
	int data[MAXSIZE]={2};
	int lenth=1;

};

//线性表输出函数
void Coutlist(Sqlist L)
{
	if (L.lenth == 0)
		cout << "None among the list." << endl;
	for (int i = 0; i < L.lenth; i++)
		cout << L.data[i] << " ";
}

//获取线性表元素
int GetElem(Sqlist L, int i, int *e)
{
	if (i<0 || i>L.lenth)
		return error;
	*e = L.data[i];
	return ok;
}

//插入操作,因为List的值要修改,所以这里用指针传递。
int IistInsert(Sqlist *L, int i, int e)
{
	// 以下几种情况报错:1、列表满。2、i超出范围。
	if (L->lenth == MAXSIZE) return error;
	if (i<1 || i>L->lenth+1) return error;
	if (i <= L->lenth) //若插入位置不在表尾
	{
		for (int j = L->lenth - 1; j >= i - 1; j--)
			L->data[j + 1] = L->data[j];
	}
	L->data[i - 1] = e;
	L->lenth++;
	return ok;
}
 
// 删除操作,e是被删除的元素
int ListDelete(Sqlist* L, int i, int *e)
{
	//如下情况报错:1、i元素位置超出范围。2、线性表是空的
	if (i<1 || i>L->lenth || L->lenth==0)
		return error;
	*e = L->data[i - 1];
	if (i < L->lenth)
	{
		for (int j = i; j < L->lenth; j++)
			L->data[j - 1] = L->data[j];
	}
	L->lenth--;
	return ok;
}

int main() {
	Sqlist list0; //新建线性表
	cout<<IistInsert(&list0, 1, 19)<<endl; // 在1位置插入元素
	Coutlist(list0);


	system("pause");

	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值