顺序表的应用(初始化顺序表,插入元素,删除元素,查找元素)

本文详细描述了如何在C语言中实现顺序表的数据结构,包括初始化、插入、删除和输出等操作,涉及动态内存分配、空间扩容和元素移动等关键步骤,并提供了完整的源代码示例。
摘要由CSDN通过智能技术生成

一、实验内容

逻辑结构为线性结构。

实现了顺序表的基本操作,包括初始化、判空、插入、删除和输出等。其中,顺序表的存储结构为动态分配的一维数组,通过malloc函数动态分配存储空间。具体实现过程,需要注意对插入和删除位置的合法性判断,以及对存储空间的扩容等问题。以下是该程序的基本操作实现:1.初始化顺序表2.判断顺序表是否为空表3.顺序表插入函数4.顺序表删除元素函数5.输出顺序表函数

二、源代码

#include<stdio.h>
#include<stdlib.h>
#define M 10//为存储空间分配10个
typedef int elemtype;
typedef struct
{
	elemtype* elem; //存储空间的基址
	int length; //表长
}sqlist;
int initlist(sqlist& l)//初始化顺序表
{
	l.elem = (elemtype*)malloc(M * sizeof(elemtype));//用malloc分配空间
	l.length = 0;
	return 1;
}
int insertlist(sqlist& l, int i, elemtype e)//输入元素
{
	int j;
	if (l.length == M)//判断表满,表长度等于最大空间时,表满
	{
		printf("表满\n");
		return 0;
	}
	if (i<1 || i>l.length + 1)//插入的范围要在1~length+1
	{
		printf("位置不对\n");
		return 0;
	}
	for (j = l.length - 1; j >= i - 1; j--) //i表示的是位置,元素要-1,从0开始的而不是1
		l.elem[j + 1] = l.elem[j]; //插入位置及之后的元素后移
	l.elem[i - 1] = e; //将新元素e放入第i个位置
	l.length++;//表长+1
	return 1;
}
void outlist(sqlist& l)//输出
{
	int i;
	for (i = 0; i < l.length; i++)
		printf("%d\t", l.elem[i]);
	printf("\n");
}
int dellist(sqlist& l, int i, elemtype& e)//删除第i个元素
{
	int j;
	if (l.length == 0)
	{
		printf("表空\n");
		return 0;
	}
	if (i < 1 || i >= l.length)
	{
		printf("位置不对\n");
		return 0;
	}
	e = l.elem[i - 1];
	for (j = i; j < l.length; j++)
		l.elem[j - 1] = l.elem[j]; //被删除元素之后的元素前移
	l.length--;//表长-1
	return 1;
}
int serlist(sqlist l, elemtype e)//查找元素的位置
{
	int j;
	for (j = 0; j < l.length; j++)
		if (e == l.elem[j])
			return j + 1;
	return 0;
}
int main()
{
	sqlist l;
	int i, t, k;
	elemtype x;
	initlist(l);
	do
	{
		printf("1 插入元素\n");
		printf("2 删除元素\n");
		printf("3 查找元素\n");
		printf("4 结束进程\n");
		printf("请输入你的选择\n");
		scanf_s("%d", &t);
		switch (t)
		{
		case 1:printf("请输入要插入的位置和元素,中间用空格分隔\n"); scanf_s("%d%d", &i, &x); insertlist(l, i, x); outlist(l); break;
		case 2:printf("请输入要删除元素位置\n"); scanf_s("%d", &i); dellist(l, i, x); printf("%d\n", x); outlist(l); break;
		case 3:scanf_s("%d", &x); k = serlist(l, x);
			if (k == 0) printf("未找到\n");
			else printf("%d\n", k);
			break;
		case 4:exit(0);
		}
	} while (t <= 4);
	return 0;
}

三、运行结果

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 初始化顺序表 ```python def init_seq_list(sequence_list, max_size): sequence_list.clear() # 清空顺序表 sequence_list.extend([0] * max_size) # 扩展顺序表的空间 ``` 2. 插入元素 ```python def insert_seq_list(sequence_list, position, value): if position < 0 or position >= len(sequence_list): return False # 插入非法,返回 False if sequence_list[-1] != 0: return False # 顺序表已满,返回 False for i in range(len(sequence_list)-1, position, -1): sequence_list[i] = sequence_list[i-1] # 从后向前移动元素 sequence_list[position] = value # 插入元素 return True ``` 3. 删除元素 ```python def delete_seq_list(sequence_list, position): if position < 0 or position >= len(sequence_list) or sequence_list[position] == 0: return False # 删除位非法或该位为空,返回 False for i in range(position, len(sequence_list)-1): sequence_list[i] = sequence_list[i+1] # 从前向后移动元素 sequence_list[-1] = 0 # 最后一个元素为 0 return True ``` 4. 查找元素 ```python def search_seq_list(sequence_list, value): for i in range(len(sequence_list)): if sequence_list[i] == value: return i # 找到元素,返回位 return -1 # 未找到元素,返回 -1 ``` ### 回答2: 顺序表是一种线性表的存储结构,可以使用数组来实现。下面是顺序表初始化插入、删除和查找的完整算法: 1. 初始化顺序表: ``` void InitList(int* list, int maxsize) { for (int i=0; i<maxsize; i++) { list[i] = 0; // 将数组元素全部初始化为0 } } ``` 2. 插入元素顺序表: ``` bool InsertElem(int* list, int maxsize, int pos, int elem) { if (pos < 1 || pos > maxsize) { return false; // 插入不合法 } if (list[maxsize-1] != 0) { return false; // 数组已满,无法插入元素 } for (int i=maxsize-1; i>=pos; i--) { list[i] = list[i-1]; // 依次后移元素,空出插入 } list[pos-1] = elem; // 将元素插入到指定位 return true; } ``` 3. 删除顺序表元素: ``` bool DeleteElem(int* list, int maxsize, int pos) { if (pos < 1 || pos > maxsize) { return false; // 删除位不合法 } if (list[pos-1] == 0) { return false; // 要删除的位为空,无法删除元素 } for (int i=pos-1; i<maxsize-1; i++) { list[i] = list[i+1]; // 依次前移元素,覆盖要删除的位 } list[maxsize-1] = 0; // 将最后一个为0 return true; } ``` 4. 查找顺序表指定元素: ``` int FindElem(int* list, int maxsize, int elem) { for (int i=0; i<maxsize; i++) { if (list[i] == elem) { return i+1; // 返回元素所在的位 } } return -1; // 没有找到指定元素 } ``` 以上就是顺序表初始化插入、删除和查找的完整算法。注意,在实际编程,还需考虑数组越界等边界情况的处理。 ### 回答3: 顺序表是一种线性表的存储结构,它通过连续的内存空间来存储元素。编写顺序表初始化插入、删除和查找的完整算法,具体如下: 1. 初始化顺序表:首先需要定义一个顺序表的结构,包括元素的类型和顺序表长度等信息。然后,通过动态分配内存空间,初始化顺序表的存储空间。初始时,将顺序表的长度设为0,表示顺序表为空。 2. 插入元素操作:插入元素时,首先判断顺序表是否已满,如果已满,则需要进行扩容。然后,将要插入元素放入指定位,并将该位后面的所有元素后移一位。最后,将顺序表的长度加1。 3. 删除元素操作:删除元素时,首先判断顺序表是否为空,如果为空,则无法执行删除操作。然后,根据元素的值或位,找到要删除的元素,并将该位后面的所有元素前移一位。最后,将顺序表的长度减1。 4. 查找元素操作:查找元素时,首先判断顺序表是否为空,如果为空,则无法执行查找操作。然后,根据元素的值或位,遍历顺序表,逐个比较元素,直到找到目标元素或遍历结束。 以上是顺序表初始化插入、删除和查找的基本算法。实际应用,可能还会涉及其他操作,如清空顺序表、获取顺序表长度等。在编写具体代码时,需要根据实际需求进行相应的优化和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值