DS-顺序表的基本操作(超级齐全)

数据结构-顺序表的基本操作(C语言实现)

实现的具体功能如下:

  1. 初始化顺序表
  2. 显示顺序表
  3. 尾部插入数据
  4. 头部插入数据
  5. 尾部删除数据
  6. 头部删除数据
  7. 顺序表扩容
  8. 查找数据(遍历式)
  9. 二分查找数据
  10. 排序
  11. 按值插入数据
  12. 按位置插入数据
  13. 按值删除数据
  14. 按位置删除数据
  15. 删除所有(与给定值相等的)数据
  16. 清空顺序表
  17. 获取头部元素
  18. 获取尾部元素
  19. 获取顺序表长度
  20. 获取顺序表容量
  21. 逆置顺序表
  22. 摧毁顺序表

这一大堆有被吓到吗?22个功能可还行?试问还有比我更全的吗?!!
在这里插入图片描述
注:上述个别功能是不暴露给用户的,所以菜单中加上退出总共是20个选项。

源代码如下:
main.c

#include "SeqList.h"

static void Menu()
{
	printf("**************************************************\n");
	printf("**************************************************\n");
	printf("--------  Please enter your choice:       --------\n");
	printf("--------  0.Quit           1.Print        --------\n");
	printf("--------  2.PushBack       3.PushFront    --------\n");
	printf("--------  4.PopBack        5.PopFront     --------\n");
	printf("--------  6.Find           7.Sort         --------\n");
	printf("--------  8.Val_Insert     9.Pos_Insert   --------\n");
	printf("--------  10.Pos_Erase    11.Val_Erase    --------\n");
	printf("--------  12.EraseAllVal  13.Clear        --------\n");
	printf("--------  14.GetFront     15.GetBack      --------\n");
	printf("--------  16.Length       17.Capacity     --------\n");
	printf("--------  18.Reverse      19.Find_Binary  --------\n");
	printf("**************************************************\n");
	printf("**************************************************\n");
}

int main()
{
	SeqList_t list;//定义结构体变量
	InitSeqList(&list);//初始化顺序表
	ELEM_TYPE item = 0;
	size_t pos = 0;
	int select = 1;
	while (select){
		Menu();
		scanf("%d", &select);
		if (0 == select){
			printf("退出成功!\n");
			break;
		}
		switch (select){
		case 1:
			SeqListPrint(&list);
			break;
		case 2:
			printf("请输入你要插入的元素(以-1结尾): ");
			while (scanf("%d", &item), item != -1){
				SeqListPushBack(&list, item);
			}
			printf("尾部插入元素成功!\n");
			break;
		case 3:
			printf("请输入你要插入的元素(以-1结尾): ");
			while (scanf("%d", &item), item != -1){
				SeqListPushFront(&list, item);
			}
			printf("头部插入元素成功!\n");
			break;
		case 4:
			SeqListPopBack(&list);
			break;
		case 5:
			SeqListPopFront(&list);
			break;
		case 6:
			printf("请输入你要查找的数据: ");
			scanf("%d", &item);
			int ret = SeqListFind(&list, item);
			if (ret == -1){
				printf("当前顺序表为空,无法进行数据查找!\n");
			}
			e
### 回答1: 题目描述: 给定一个顺序表,删除其中指定区间的元素。 输入格式: 第一行输入一个整数 n,表示顺序表的长度。 第二行输入 n 个整数,表示顺序表中的元素。 第三行输入两个整数 left 和 right,表示要删除的区间。 输出格式: 输出删除区间后的顺序表。 样例输入: 6 1 2 3 4 5 6 2 4 样例输出: 1 5 6 算法1 (顺序表遍历) $O(n)$ 1.输入顺序表的长度和元素,以及要删除的区间。 2.遍历顺序表,将不在删除区间内的元素添加到新的顺序表中。 3.输出新的顺序表。 时间复杂度 遍历顺序表,时间复杂度为 $O(n)$。 参考文献 无。 C++ 代码 算法2 (暴力枚举) $O(n^2)$ blablabla 时间复杂度 参考文献 C++ 代码 ### 回答2: 本题要求我们完成顺序表区间元素删除操作。首先,我们需要明确顺序表的相关概念和属性。 顺序表是一种线性表,它的元素存储在一段连续的存储区域中,可以通过下标来访问其中的元素。对于一个长度为n的顺序表,我们可以用一个一维数组来表示,其中下标为0到n-1的元素就是顺序表中的各个元素。顺序表还具有以下特性: 1. 随机访问:顺序表的元素可以通过下标来直接访问,可以随机访问任一元素,时间复杂度为O(1)。 2. 插入删除操作比较麻烦:在顺序表中,插入和删除操作会涉及到元素的移动,因此时间复杂度为O(n)。 基于以上概念,我们可以开始考虑本题的实现。具体来说,我们需要实现一个函数,该函数接受三个参数:顺序表L,要删除的区间范围i到j(下标从0开始),以及区间大小n(要删除的元素个数)。函数的返回值为布尔类型,表示操作是否成功。 我们可以按如下步骤进行操作: 1. 检查参数的合法性。首先,我们需要确保i和j的范围合法,即0<=i<=j<len(L)-1。其次,我们需要确保要删除的区间大小n不大于i-j+1,否则无法删除。 2. 实现删除操作。由于删除操作涉及到后续元素的移动,因此我们需要从j+1处开始遍历顺序表,将每个元素向前移动n个位置,直到将整个区间都覆盖住,然后我们需要更新顺序表的长度(L的长度减去n),最后返回操作成功即可。 需要注意的是,当要删除的区间长度为0时,我们只需要返回操作成功即可,不需要进行任何实际的删除操作。 最后,我们需要对该函数进行测试,确保它能够正确地删除顺序表中的区间元素。测试时,需要涵盖如下场景: 1. 删除整个顺序表的情况。 2. 删除顺序表的某一端的情况。 3. 删除顺序表的中间一段区间的情况。 如果在测试过程中发现存在错误,我们需要及时进行调试并修复问题,确保函数能够正确地实现顺序表区间元素的删除。 ### 回答3: 顺序表区间元素删除是一种常见的操作,在此我们以7-1 jmu-ds-顺序表为例进行操作。 首先,我们需要确定要删除的元素区间,在顺序表中用下标i和j表示。其中,i代表区间左端点,j代表区间右端点。 接着,我们需要进行删除操作。这里我们采用循环遍历的方式,从区间右端点j开始遍历到左端点i,将每个元素向后移动一个单位,直到移动结束,即元素从i+1一直到j-1都向前移动了一个单位。 代码如下: ```C++ for(int k=j; k<size; k++) { data[k-(j-i+1)] = data[k]; } size = size-(j-i+1); ``` 在上述代码中,我们首先从右端点开始循环遍历,向左一路遍历到左端点为止。对于每个遍历到的元素,我们把它向后挪动(j-i+1)个单位,即往前挪动了整个区间的长度。最后,我们更新顺序表的大小,将其减去被删除区间的长度即可。 这样,我们就完成了顺序表区间元素删除的操作。总体来说,顺序表区间元素删除加强了顺序表的灵活性,在实际应用中非常有用。同时,这种操作也可以帮助我们深入理解和学习数据结构的底层算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值