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

目录

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;
}

相关推荐
问好眼25 分钟前
《算法竞赛进阶指南》0x04 二分-1.最佳牛围栏
数据结构·c++·算法·二分·信息学奥赛
会编程的土豆44 分钟前
【数据结构与算法】优先队列
数据结构·算法
minji...2 小时前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
罗湖老棍子3 小时前
最大数(信息学奥赛一本通- P1549)(洛谷-P1198)
数据结构·算法·线段树·单点修改 区间求最大值
垫脚摸太阳5 小时前
第 36 场 蓝桥·算法挑战赛·百校联赛---赛后复盘
数据结构·c++·算法
Aaswk5 小时前
刷题笔记(回溯算法)
数据结构·c++·笔记·算法·leetcode·深度优先·剪枝
计算机安禾6 小时前
【数据结构与算法】第14篇:队列(一):循环队列(顺序存储
c语言·开发语言·数据结构·c++·算法·visual studio
Java_小白呀6 小时前
考研408数据结构(持续更新中...)
数据结构·考研
Frostnova丶6 小时前
(11)LeetCode 239. 滑动窗口最大值
数据结构·算法·leetcode
励志的小陈7 小时前
数据结构Stack(C语言--用数组实现栈)
c语言·数据结构