前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >期末考试必备----数据结构----顺序表(初始化,插入,删除,合并)

期末考试必备----数据结构----顺序表(初始化,插入,删除,合并)

作者头像
用户11039529
发布2024-04-11 08:19:55
850
发布2024-04-11 08:19:55
举报
文章被收录于专栏:算法学习日常算法学习日常

数据结构专栏:数据结构_脑子不好的小菜鸟的博客-CSDN博客

代码语言:javascript
复制
				/*顺序表的基本操作*/
					/*插入,删除*/
#define ok 1
#define error 0
#define overflow -2//溢出
#define initsize 50//初始数组长度
#define addsize 20//每次追加的长度

typedef int status;//返回状态
typedef int elemtype;//数据类型

typedef struct list
{
	elemtype* elem;//数组首元素递增
	int len;//数组元素个数
	int listsize;//开辟的数组长度
}qlist;

status initlist(qlist& L)
{
	elemtype* p = (elemtype*)malloc(sizeof(elemtype) * initsize);
	if (p == NULL)
	{
		printf("空间申请失败!\n");
		exit(overflow);
	}

	L.elem = p;
	L.listsize = initsize;
	L.len = 0;
	return ok;
}

status input(qlist& L)
{
	printf("请输入顺序表的元素个数\n");
	int n;
	scanf("%d", &n);

	L.len = n;
	int i;

	printf("请输入顺序表中%d个元素:\n", n);
	//法一:普通写法
	//for (i = 0; i < L.len/**/; i++)
	//	scanf("%d", L.elem + i);/*把平时的数组名更改为L.elem*/

	//法二:指针写法
	int* p = L.elem;
	for (p; p < L.elem + L.len/**/; p++)
		scanf("%d", p);/**/

	return ok;
}

status output(qlist L)//不改变L,不传引用
{
	printf("打印顺序表元素:\n");
	int i;

	//法一:普通写法
	//for (i = 0; i < L.len; i++)
	//	printf("%d ", L.elem[i]);
	//printf("\n");

	//法二:指针写法
	int* p = L.elem;
	for (p; p < L.elem + L.len/**/; p++)
		printf("%d ", *p);/**/
	printf("\n");

	return ok;
}

status insert(qlist& L)
{
	printf("请输入你要插入的位置:\n");

	int n;
	scanf("%d", &n);

	if (n < 1 || n > L.len)
	{
		printf("插入位置错误!\n");
		return error;
	}

	int i;
	for (i = L.len - 1; i >= n - 1; i--)//插入:从后向前
		L.elem[i + 1] = L.elem[i];

	printf("请输入你要插入的数据!\n");
	int m;
	scanf("%d", &m);
	L.len++;/**/
	L.elem[n - 1] = m;
	printf("插入成功!\n");

	return ok;
}

status dele(qlist& L)
{
	printf("请输入要删除的位置!\n");
	int n;
	scanf("%d", &n);

	if (n < 1 || n > L.len)
	{
		printf("位置错误,删除失败!\n");
		exit(overflow);
	}

	int i;
	for (i = n - 1; i < L.len - 1; i++)
		L.elem[i] = L.elem[i + 1];

	L.len--;/**/
	printf("删除成功!\n");
	return ok;
}

void mysort(qlist& L)
{
	//指针写法
	int* p, *q, temp;
	for (p = L.elem;  p < L.elem + L.len - 1;  p++)
	{
		for (q = p + 1; q < L.elem + L.len; q++)
		{
			if (*p > *q)
			{
				temp = *p;
				*p = *q;
				*q = temp;
			}
		}
	}

	printf("排序好的顺序表为:\n");
}

void mycombine(qlist L, qlist L1, qlist& L2)
{
	//下标写法
	int len = 0;
	int i = 0, j = 0, k;
	while (i < L.len && j < L1.len)
	{

		while (i < L.len && L.elem[i] <= L1.elem[j])
		{
			L2.elem[len++] = L.elem[i];
			if (L.elem[i] == L1.elem[j])
				j++;
			i++;
		}

		if (i < L.len)
		{
			while (j < L1.len && L1.elem[j] <= L.elem[i])
			{
				L2.elem[len++] = L1.elem[j];
				if (L.elem[i] == L1.elem[j])
					i++;

				j++;
			}
		}

	}

	if (i < L.len)
	{
		for (i; i < L.len; i++)
			L2.elem[len++] = L.elem[i];
	}
	else
	{
		for (j; j < L1.len; j++)
			L2.elem[len++] = L1.elem[j];
	}
	L2.len = len;
}

int main()
{
	qlist L;
	initlist(L);
	input(L);
	//output(L);
	//insert(L);//插入元素
	//output(L);

	//dele(L);//删除元素
	//output(L);

	/*排序,合并*/
	mysort(L);
	output(L);

	qlist L1;
	initlist(L1);
	input(L1);
	mysort(L1);
	output(L1);
	qlist L2;
	initlist(L2);
 //合并两个数组L1,L2
	mycombine(L, L1, L2);
	output(L2);
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档