数据结构C++数组线性表基本操作及顺序合并

本文介绍使用C++实现线性表的基本操作,包括插入、删除等,并通过尾插法实现两个有序线性表的顺序合并。代码示例清晰展示了如何在C++中操作数组来模拟线性表。

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

数据结构用c++实现的数组线性表

基本操作:插入、删除函数以及在main函数里的初始化

以及

顺序合并:尾插法实现(假定原表数据已经有序,不打乱原有顺序)

代码片段:

#include <iostream>
using namespace std;

#define maxlength 50
typedef int Elementtype;
struct LIST {
	Elementtype elements[maxlength];
	int last = 0;
};

typedef struct {
	Elementtype *elements;
	int smaxlength = 100, last;
} SLIST;

typedef int position;

//定义顺序表的结束
position End(LIST L) {
	return (L.last + 1);
}

//把x插入顺序表L的p处
void Insert(Elementtype x, position p, LIST &L) {
	position q;
	if (L.last >= maxlength - 1)
		cout << "List is full!" << endl;
	else if ((p > L.last + 1) || (p < 1))
		cout << "position doesn't exist!" << endl;
	else {
		for (q = L.last; q >= p; q--) {
			L.elements[q + 1] = L.elements[q];
		}
		L.last = L.last + 1;
		L.elements[p] = x;
	}
}//Insert

void Delete(position p, LIST L) {
	position q;
	if ((p > L.last) || (p < 1))
		cout << "position does not exist!" << endl;
	else {
		L.last = L.last - 1;
		for (q = p; q <= L.last; q++)
			L.elements[q] = L.elements[q + 1];
	}
}//Delete

//返回L中x的位置
position Locate(Elementtype x, LIST L) {
	position q;
	for (q = 1; q <= L.last; q++) {
		if (L.elements[q] == x)
			return q;
	}
	return (L.last + 1);
}//Locate

//顺序合并 尾插法
bool Merge(LIST L1, LIST L2, SLIST &L3) { 
	if (L1.last + L2.last > L3.smaxlength)
		return false;
	int i = 0, j = 0, k = 0;
	while (i < L1.last && j < L2.last ) {
		if (L1.elements[i] <= L2.elements[j])
			L3.elements[k++] = L1.elements[i++];
		else
			L3.elements[k++] = L2.elements[j++];
	}
	while (i < L1.last)
		L3.elements[k++] = L1.elements[i++];
	while (j < L2.last)
		L3.elements[k++] = L2.elements[j++];
	L3.last = k ;								//该方法思想较重要
	return true;
}

int main() {
	LIST L1;
	LIST L2;
	SLIST L3;
	L3.elements = new Elementtype[maxlength];
	int i, j;
	for (i = 0; i < maxlength ; i++) {
		L1.elements[i] = i * 2 - 1;
		L1.last++;
	}
	for (j = 0; j < maxlength ; j++) {
		L2.elements[j] = j * 2;
		L2.last++;
	}
	cout << L1.last << endl;
	cout << L2.last << endl;
	Merge(L1, L2, L3);

	cout << "LIST1" << endl;
	for (i = 0; i < L1.last ; i++)
		cout << L1.elements[i] << " ";
	cout << "\n" << "LIST2" << endl;
	for (i = 0; i < L2.last ; i++)
		cout << L2.elements[i] << " ";
	cout << "\n" << "LIST3" << endl;
	for (i = 0; i < L3.last ; i++)
		cout << L3.elements[i] << " ";
	return 0;
}

主要参考:《数据结构与算法》(第五版)张岩

                  《数据结构考研复习》(王道)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值