顺序表操作

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝

既然选择了远方,当不负青春,砥砺前行!

将两个有序的线性表合并为一个有序的线性表

main.cpp文件

cpp 复制代码
//将两个有序的线性表合并为一个有序的线性表
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"SeqList.h"

void MergeList(SeqList A, SeqList B, SeqList* C);

int main()
{
	DataType a[] = { 8,17,17,25,29 };
	DataType b[] = { 3,9,21,21,26,57 };
	DataType e;
	SeqList A, B, C;
	InitList(&A);
	InitList(&B);
	InitList(&C);
	for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	{
		InsertElem(&A, i, a[i]);
	}
	for (int i = 0; i < sizeof(b) / sizeof(b[0]); i++)
	{
		InsertElem(&B, i, b[i]);
	}
	printf("顺序表A中的元素:\n");
	for (int i = 0; i < A.length; i++)
	{
		GetElem(A, i, &e);
		printf("%4d", e);
	}
	printf("\n");
	printf("顺序表B中的元素:\n");
	for (int i = 0; i < B.length; i++)
	{
		GetElem(B, i, &e);
		printf("%4d", e);
	}
	printf("\n");
	printf("将顺序表A和B合并得到C:\n");
	MergeList(A, B, &C);
	for (int i = 0; i < C.length; i++)
	{
		GetElem(C, i, &e);
		printf("%4d", e);
	}
	return 0;
}

void MergeList(SeqList A, SeqList B, SeqList* C)
{
	int i, j, k;
	i = j = k = 0;
	DataType e1, e2;
	while (i < A.length-1 && j < B.length-1)
	{
		GetElem(A, i, &e1);
		GetElem(B, j, &e2);
		if (e1 <= e2)
		{
			InsertElem(C, k, e1);
			i++;
			k++;
		}
		else
		{
			InsertElem(C, k, e2);
			j++;
			k++;
		}
	}
	while (i <= A.length - 1)
	{
		GetElem(A, i, &e1);
		InsertElem(C, k, e1);
		i++;
		k++;
	}
	while (j <= B.length - 1)
	{
		GetElem(B, j, &e2);
		InsertElem(C, k, e2);
		j++;
		k++;
	}
	C->length = A.length + B.length;
}

SeqList.h文件

cpp 复制代码
#pragma once
#include<stdio.h>
#include"SeqList.h"

typedef int DataType;
constexpr auto MaxSize = 100;

typedef struct
{
	DataType data[MaxSize];
	int length;
}SeqList;

void InitList(SeqList* L);

int ListEmpty(SeqList L);

int GetElem(SeqList L, int i, DataType* e);

int LocateElem(SeqList L, DataType e);

int InsertElem(SeqList* L, int i, DataType e);

int DeleteElem(SeqList* L, int i, DataType* e);

int ListLength(SeqList L);

void ClearList(SeqList* L);

SeqList.cpp文件

cpp 复制代码
#include "SeqList.h"
#define _CRT_SECURE_NO_WARNINGS 1

void InitList(SeqList* L)
{
	L->length = 0;
}

int ListEmpty(SeqList L)
{
	if (L.length == 0)
	{
		return 1;
	}
	else
		return 0;
}

int GetElem(SeqList L, int i, DataType* e)
{
	if (i<0 || i>L.length-1)
	{
		return 0;
	}
	*e = L.data[i];
	return 1;
}

int LocateElem(SeqList L, DataType e)
{
	int i;
	for (i = 0; i < L.length; i++)
	{
		if (L.data[i] == e)
			return i;
	}
	return -1;
}

int InsertElem(SeqList* L, int i, DataType e)
{
	if (i<0 || i>L->length+1)
	{
		printf("插入位置i不合法!\n");
		return -1;
	}
	else if(L->length>=MaxSize)
	{
		printf("顺序表已满,不能插入元素!\n");
		return 0;
	}
	else
	{
		int j;
		for (j = L->length; j >= i; j--) 
		{
			L->data[j+1] = L->data[j];
		}
		L->data[i] = e;
		(L->length++);
		return 1;
	}
}

int DeleteElem(SeqList* L, int i, DataType* e)
{
	if (i > L->length - 1 || i < 0)
	{
		printf("删除位置不合适!\n");
		return 0;
	}
	else
	{
		int j;	
		*e = L->data[i];
		for (j = 0; j < i; j++)
		{
			L->data[j] = L->data[j + 1];
		}
		(L->length--);
		return 1;
	}
}

int ListLength(SeqList L)
{
	return L.length;
}

void ClearList(SeqList* L)
{
	L->length = 0;
}
相关推荐
咕咕吖8 分钟前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎40 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu1 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!1 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
幸运超级加倍~3 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan201903133 小时前
【算法】(Python)动态规划
python·算法·动态规划