数据结构·在顺序表List[]中,实现顺序表的基本操作,包括:初始化顺序表,在表中插入元素、删除元素。

本文介绍了一个使用C语言实现的顺序表数据结构,可以动态创建,支持用户输入插入和删除操作,并实时显示表内容。程序允许用户选择初始化、插入、删除和查看顺序表状态,直至退出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)顺序表的元素个数可随意设定;
2)可连续测试任意多个元素的插入、删除,(插入、删除位置及要插入元素数值均从键盘输入);
3)任一操作结束后将顺序表中的内容输出;4)可由用户选择退出程序;

#include <stdio.h>
#define MAXLEN 50
typedef int datatype;

typedef struct
{
	datatype List[MAXLEN];
	int len;
}Seqlist;

Seqlist* initq();
int insertq(Seqlist* la, int n);
int deleteq(Seqlist* la, int n);
int print(Seqlist* la);

int main()
{
	Seqlist* la;
	int s, n;    /* s 选择输入, n 插入或删除数据的个数*/
	printf("请输入你的选择: 1---initiate 2---insert 3---delete 4---print 5---exit\nyour choice =\n");
	scanf("%d", &s);
	while (s != 5)
	{
		if (s == 1)
		{
			la = initq();
			printf("完成初始化 !\n");
		}
		else if (s == 2)
		{
			printf("请输入待插入的数据个数:");
			scanf("%d", &n);
			insertq(la, n);
			print(la);
		}
		else if (s == 3)
		{
			printf("请输入待删除的数据个数:");
			scanf("%d", &n);
			deleteq(la, n);
			print(la);
		}
		else if (s == 4)
		{
			print(la);
		}

		else
			printf("你的选择是错误的!\n ");

		printf("请输入你的选择: 1---initiate 2---insert 3---delete 4---print 5---exit\nyour choice =");
		scanf("%d", &s);
	}
}

Seqlist* initq() /*初始化*/
{
	Seqlist* L;
	L = (Seqlist*)malloc(sizeof(Seqlist));
	L->len = 0;	return L;
}

int insertq(Seqlist* la, int n)      /*插入*/
{
	while (n)
	{
		int i, j;/* i插入位置,j顺序表下标 */
		float x;
		if (la->len == MAXLEN - 1)
		{
			printf("\n 表已满,不能插入! \n");
			return 0;
		}
		printf("\n 请输入插入的位置:\n");
		scanf("%d", &i);
		if (i<1 || i>(la->len+1))
		{
			printf("\n 插入位置错误!\n");
		}
		else
		{
			printf("\n 请输入插入元素的的数值 \n");
			scanf("%f", &x);
			for (j = la->len; j >= i; j--)
				la->List[j + 1] = la->List[j];
			la->List[i] = x;
			la->len++;
			n--;
		}
	}
	printf("插入完成!\n");
	return 1;
}

int deleteq(Seqlist* la, int n)           /*删除*/
{
	int i, j;  /*  i删除位置, j顺序表下标 */
	while (n)
	{
		if (la->len == 0)
		{
			printf("\n 表空,不能删除!\n");
			return 0;
		}
		printf("请输入删除的位置:");
		scanf("%d", &i);
		if (i<1 || i>la->len)
		{
			printf("\n 删除位置错误!\n");
		}
		else
		{
			for (j = i + 1; j <= la->len; j++)
				la->List[j - 1] = la->List[j];
			la->len--;
			n--;
		}
	}
	printf("删除完成!\n");
	return 1;
}

int print(Seqlist* la)           /*显示输出*/
{
	int m;
	if (la->len == 0)
	{
		printf("顺序表为空!\n");
		return 0;
	}
	else
	{
		printf("当前的顺序表为:\n");
		for (m = 1; m <= la->len; m++)
			printf("List[%d]=%d  ", m, la->List[m]);
		printf("\n表长为%d\n", la->len);
		return 1;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值