IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构线性表 -顺序表练习Demo(稍作修改即为各种管理系统) -> 正文阅读

[数据结构与算法]数据结构线性表 -顺序表练习Demo(稍作修改即为各种管理系统)

数据结构线性表 -顺序表练习Demo(稍作修改即为各种管理系统)

话不多说,直接上代码。

#include <stdlib.h>
#include <iostream>
using namespace std;

#define MAXSIZE 100  //顺序表大小,即为一共能存储的记录数(数据)

typedef struct{   //元素只有一个浮点型数据的结构体数组
	float p;
} Elem;

typedef struct{   //定义一个名称为Sqlist的顺序表,*elem 代表上面那个结构体数组首元素的地址
	Elem *elem;
	int length;
}Sqlist;

int InitList_Sq(Sqlist &L) //初始化顺序表
{
	float c = 0.0; int i;
	L.elem = new Elem[MAXSIZE];  //C++的定义结构体数组大小,C语言:L.elem = (Elem *)malloc(sizeof(Sqlist)*MAXSIZE);
	if (!L.elem)
		exit(-1);
	else
		L.length = 0;
	cout << "顺序表创建成功!请添加新建数据!按0结束!";  //结束条件可更改(更改需要改一下浮点型的数据类型)
	
	for (i = 0; i < MAXSIZE; i++)
	{
		if (L.elem[i-1].p == c)
		{
			break;
		}
		else
			cin >> L.elem[i].p;
	}
	L.length = i-1;
	return 1;
}

int DestoryList(Sqlist &L){  //销毁顺序表
	if (L.elem)
	{
		delete L.elem;
		L.length = 0;
		return 1;
	}
	else
		return 0;
}

void ClearList(Sqlist &L){  //将顺序表的长度置0
	L.length = 0;
}

int GetLength(Sqlist &L){  //获取顺序表的长度
	return L.length;
}

int IsEmpty(Sqlist &L){  //判断线性表是否为空
	if (L.length == 0)
	{
		return 1;
	}
	return 0;
}

int GetElem(Sqlist &L, int i, Elem e){  //查找第i个位置上的数据
	if (i<1 || i>L.length)
		return 0;
	else
		e = L.elem[i - 1];
	return 1;
}

void PrintList(Sqlist &L){   //输出顺序表数据
	if (L.length == 0)
	{
		cout << "此顺序表不存在或无数据元素!";
		exit(-2);
	}
	else
	{
		for (int i = 0; i < L.length; i++)
		{
			float e = L.elem[i].p;
			cout << e;
		}
	}
}

int InsertList(Sqlist &L, int k, float a)  //按指定位置插入数据
{
	if (k<1 || k>L.length)
		return 0;
	else if (L.length == 0)
		return 0;
	else 
	for (int i = L.length; i > k; i--)
	{
		L.elem[i].p = L.elem[i - 1].p;
		L.elem[k - 1].p = a;
	}
	L.length = L.length + 1;
	return 1;
}


int DeleteList(Sqlist &L, float k)  //删除顺序表指定位置上的数据
{
	if (k<1 || k>L.length-1)
		return 0;
	if (L.length == 0)
		return 0;
	for (int i = k; i < L.length; i++)
	{
		L.elem[i - 1].p = L.elem[i].p;
	}
	--L.length;
	return 1;
}

int SearchList(Sqlist &L, int k)  //查找书序表指定位置上的数据
{
	if (k<1 || k>L.length - 1)
		return 0;
	else if (L.length == 0)
		return 0;
	else return k - 1;
}

void AddList(Sqlist &L)   //在顺序表尾部添加数据
{
	float a = 1;
	int i = L.length;
	cout << "请输入数据,按0结束!";
	while (a)
	{
		cin >> a;
		L.elem[i].p = a;
		++i;
		if (a != 0)
		{
			L.length++;
		}
	}
	cout << "添加成功!";
}

void Contents()  //菜单清单
{
	cout << "***************************************\n";
	cout << "*             顺 序 表 练 习          *\n";
	cout << "*                                     *\n";
	cout << "*        1.建立顺序表并录入数据       *\n";
	cout << "*        2.查看顺序表数据             *\n";
	cout << "*        3.退出程序                   *\n";
	cout << "*        4.销毁顺序表                 *\n";
	cout << "*        5.获取顺序表长度             *\n";
	cout << "*        6.查找顺序表某个位置上的数据 *\n";
	cout << "*        7.将顺序表置空               *\n";
	cout << "*        8.插入数据                   *\n";
	cout << "*        9.删除数据                   *\n";
	cout << "*        10.查找数据                  *\n";
	cout << "*        11.尾部添加数据              *\n";
	cout << "***************************************\n";
}

void main(){   //主函数

	
	Sqlist L;
	Elem e;
	int flag,a,n,k,b;
	flag = 1;
	while (flag)
	{
		system("cls");
		Contents();
		cin >> a;
		switch (a)
		{
			case 1: if (InitList_Sq(L)){ cout << "数据录取完毕!"; system("PAUSE"); break; }
					else{ cout << "失败!"; break; }
			case 2: PrintList(L); system("PAUSE"); break;
			case 3: exit(-1);
			case 4: if (DestoryList(L)){ cout << "顺序表销毁成功!"; }else{cout << "书序表不存在,销毁失败!";} system("PAUSE"); break;
			case 5:	cout << GetLength(L); system("PAUSE"); break;
			case 6: cout << "查找第几个位置上的数据?"; cin >> n; cout << L.elem[n - 1].p; system("PAUSE"); break;
			case 7: ClearList(L); cout << "成功将顺序表置空!"; system("PAUSE"); break;
			case 8: cout << "输入插入的数据的位置:"; cin >> k; cout << "\n"; cout << "请输入要插入的数据:"; cin >> b; 
				if (InsertList(L, k, b)){ cout << "插入成功!"; }else {cout<<"插入失败";}system("PAUSE"); break;
			case 9: cout << "输入要删除第几个数据:"; cin >> k; if (DeleteList(L, k)){ cout << "删除成功!"; }
					else { cout << "删除失败"; }system("PAUSE"); break;
			case 10: cout << "输入你要第几个数据:"; cin >> k; if (SearchList(L, k)) { cout << "查找成功!" << L.elem[SearchList(L, k)].p; }
					 else { cout << "查找失败"; }system("PAUSE"); break;
			case 11: AddList(L); system("PAUSE"); break;
			default: printf("输入错误!请重新输入"); system("PAUSE"); break;
		}
	}
}

顺序表的话必须有两个自定义的抽象函数类型。
连续存储,用物理存储的位置来描述数据的逻位置关系(有唯一前趋和后继(除第一个和最后一个元素以外))。
存取元素方法:随机存取。
时间复杂度(查找、插入、删除):O(n)
空间复杂度:S(n)= O(1)

优点:
存取密度大
可以随机存取表中任意一个元素
缺点:
插入删除需要移动大量元素
浪费存储空间
不能自由分配存储空间

顺序表的Demo分享到这,不太会的同学可以留言问我,大家一同学习

  • List item

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:44:57  更:2021-07-24 11:45:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 6:28:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码