数据结构——线性表顺序表示详解

目录

1.线性表的类型定义

2.基本操作

3.线性表的存储结构

4.补充

1.元素类型说明

2.数组定义​编辑

3.c语言的内存动态分配

4.c++的动态存储分配

5.c++中的参数传递

引用类型作参数

6.顺序表基本操作的实现

1.线性表的初始化

代码示例:

2.销毁线性表,清空线性表

​ 代码示例:

3.求线性表长度,判断线性表是否为空

代码示例:

4.顺序表的取值

代码示例:

5.顺序表的查找

代码示例:

6.顺序表的插入

代码示例:

​7.顺序表的删除

代码示例:

7.顺序表的操作算法分析

8.总的代码及示例


1.线性表的类型定义

相当于一个数组

2.基本操作

3.线性表的存储结构

4.补充

1.元素类型说明

2.数组定义

3.c语言的内存动态分配

计算出所需的大小再将它的指针赋值给data

4.c++的动态存储分配

5.c++中的参数传递

引用类型作参数

使用引用后传进函数的就是a和b本身,并没有重新复制一份

6.顺序表基本操作的实现

1.线性表的初始化

代码示例:

cpp 复制代码
typedef struct{
	int *elem;
	int length;
}sqlist;

bool init_sqlist(sqlist &l)
{
	l.elem = new int[100];
	if(!l.elem) exit(-2);
	l.length = 0;
	return 1;
}

2.销毁线性表,清空线性表

代码示例:

cpp 复制代码
void destory_list(sqlist &l)
{
	if(l.elem) delete l.elem;
}

void clear_list(sqlist &l)
{
	l.length = 0;
}

3.求线性表长度,判断线性表是否为空

代码示例:

cpp 复制代码
int getlength(sqlist &l)
{
	return l.length;
}

bool isempty(sqlist &l)
{
	if(l.length == 0) return 1;
	else return 0;
}

4.顺序表的取值

代码示例:

cpp 复制代码
int getelem(sqlist &l,int i,int &e)
{
	if(i < 1 || i > l.length) return -1;
	e = l.elem[i-1];
	return 1;
}

5.顺序表的查找

代码示例:

cpp 复制代码
int locateelem(sqlist & l,int e)
{
	for(int i = 0; i < l.length; i++)
	{
		if(l.elem[i] == e) return i + 1;
	}
	return 0;
}

6.顺序表的插入

代码示例:

cpp 复制代码
int insert(sqlist &l,int i,int e)
{
	if(i < 1 || i > l.length + 1) return 0;
	if(l.length == 100) return 0;
	for(int j = l.length - 1;j >= i - 1;j--)
	{
		l.elem[j + 1] = l.elem[j];
	}
	l.elem[i - 1] = e;
	l.length ++;
	return 1;
}

7.顺序表的删除

代码示例:

cpp 复制代码
int deletelist(sqlist &l,int i)
{
	if(i < 1 || i > l.length) return 0;
	for(int j = i; j <= l.length - 1; j++)
	{
		l.elem[j - 1] = l.elem[j];
	}
	l.length--;
	return 1;
}

7.顺序表的操作算法分析

8.总的代码及示例

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

typedef struct{
	int *elem;
	int length;
}sqlist;

void init_sqlist(sqlist &l)
{
	l.elem = new int[100];
	l.length = 0;
}

void destory_list(sqlist &l)
{
	if(l.elem) delete l.elem;
}

void clear_list(sqlist &l)
{
	l.length = 0;
}

int getlength(sqlist &l)
{
	return l.length;
}

bool isempty(sqlist &l)
{
	if(l.length == 0) return 1;
	else return 0;
}

int getelem(sqlist &l,int i,int &e)
{
	if(i < 1 || i > l.length) return -1;
	e = l.elem[i-1];
	return 1;
}

int locateelem(sqlist & l,int e)
{
	for(int i = 0; i < l.length; i++)
	{
		if(l.elem[i] == e) return i + 1;
	}
	return 0;
}

int insert(sqlist &l,int i,int e)
{
	if(i < 1 || i > l.length + 1) return 0;
	if(l.length == 100) return 0;
	for(int j = l.length - 1;j >= i - 1;j--)
	{
		l.elem[j + 1] = l.elem[j];
	}
	l.elem[i - 1] = e;
	l.length ++;
	return 1;
}

bool deletelist(sqlist &l,int i)
{
	if(i < 1 || i > l.length) return 0;
	for(int j = i; j <= l.length - 1; j++)
	{
		l.elem[j - 1] = l.elem[j];
	}
	l.length--;
	return 1;
}

int main()
{
	sqlist l;
	init_sqlist(l);
	cout << getlength(l) << endl;
	insert(l,1,1);
	insert(l,2,10);
	insert(l,3,100);
	insert(l,4,1000);
	insert(l,5,10000);
	cout << locateelem(l,100) << endl;
	cout << locateelem(l,10000) << endl;
	
	cout << getlength(l) << endl;
	deletelist(l,3);
	cout << getlength(l) << endl;
	
	return 0;
}

相关推荐
一个爱编程的人4 小时前
一个数是不是素数
数据结构·算法
忡黑梨4 小时前
eNSP_从直连到BGP全网互通
c语言·网络·数据结构·python·算法·网络安全
地球资源数据云5 小时前
1900-2023年中国物种分布点位矢量数据集
大数据·数据结构·数据库·数据仓库·人工智能
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
牢姐与蒯6 小时前
cpp数据结构之map
数据结构
故事和你916 小时前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论
北顾笙9806 小时前
day37-数据结构力扣
数据结构·算法·leetcode
liuyao_xianhui7 小时前
进程概念与进程状态_Linux
linux·运维·服务器·数据结构·c++·哈希算法·宽度优先
如君愿7 小时前
考研复习 Day 26 | 习题--计算机网络第三章(数据链路层 下)、数据结构 多维数组与广义表
数据结构·计算机网络·考研·记录考研
bqq198610267 小时前
MySQL分库分表
数据结构·mysql