复习,顺序表

#include<iostream>
using namespace std;

#define INIT_SIZE 30

typedef struct {
	int* data;
	int len;
}SeqList;

int initList_Seq(SeqList& L) {
	L.data = new int[INIT_SIZE];
	L.len = 0;
	return 0;
}
int destroyList_Seq(SeqList& L) {
	delete[] L.data;
	L.data == NULL;
	L.len = 0;
	return 0;
}

typedef struct {
	int data[INIT_SIZE];
	int len;
}SqList;

int initList_Sq(SqList& L) {
	L.len = 0;
	return 0;
}
int destroyList_Sq(SqList& L) {
	L.len = 0;
	return 0;
}
int isemptyList_Sq(SqList L) {
	if (L.len == 0)
		return true;
	return false;
}
int getList_Sq(SqList L,int i,int &e) {
	if (i > L.len)
		return false;
	e = L.data[i - 1];
	return e;
}
int creatList_Sq(SqList& L) {
	int n;
	cout << "输入元素个数:";
	cin >> n;
	for (int i = 0; i < n; i++) {
		int e;
		cin >> e;
		L.data[i] = e;
		L.len++;
	}
	return 0;
}
int printList_Sq(SqList L) {
	for (int i = 0; i < L.len; i++)
		cout << L.data[i] << " ";
	cout << endl;
	return 0;
}
int insertList_Sq(SqList& L, int i, int e) {
	if (i<1 || i>L.len + 1)
		return false;
	if (L.len >= INIT_SIZE)
		return false;
	for (int j = L.len; j >= i; j--) {
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;
	L.len++;
	return true;
}
int deleteList_Sq(SqList& L, int i, int& e) {
	if (i<1 || i>L.len )
		return false;
	e = L.data[i - 1];
	for (int j = i; j < L.len; j++)
		L.data[j - 1] = L.data[j];
	L.len--;
	return e;
}

//算法2.1
int unionList(SqList& L1, SqList& L2) {
	int flag = 0;
	if (L1.len + L2.len > INIT_SIZE)
		return false;
	for (int i = 0; i < L2.len; i++) {
		for (int j = 0; j < L1.len; j++)
			if (L2.data[i] == L1.data[j])
				flag = 1;
		if (flag == 0)
			insertList_Sq(L1, L1.len, L2.data[i]);
		//这里的insert是在插在第i个元素的前面,所以会导致L1的末尾元素后移
		flag = 0;
	}
	return true;
}
//算法2.2,我也不知道为什么第一个一直插不进去
SqList unionList2(SqList& L1, SqList& L2) {
	SqList L3;
	initList_Sq(L3);
	int i, j, num = 1;//num=1,外界看的不是数组
	for (i =0,j=0; i < L1.len && j < L2.len;) {
		if (L1.data[i] <= L2.data[j]) 
			insertList_Sq(L3, num++, L1.data[i++]);
		else 
			insertList_Sq(L3, num++, L2.data[j++]);
	}
	while (i < L1.len) 
		insertList_Sq(L3, num++, L1.data[i++]);

	while (j < L2.len) 
		insertList_Sq(L3, num++, L2.data[j++]);
	return L3;
}
//int main() {
//	SeqList L;
//	initList_Seq(L);
//	cout << L.data[2] << endl;
//	return 0;
//}
int main() {
	SqList L1, L2;
	initList_Sq(L1);
	creatList_Sq(L1);
	//if (insertList_Sq(L1, 3, 10) == true)
	//	printList_Sq(L1);
	//else
	//	cout << "error" << endl;

	initList_Sq(L2);
	creatList_Sq(L2);
	//unionList(L1, L2);
	//printList_Sq(L1);
	SqList L3=unionList2(L1, L2);
	printList_Sq(L3);
	cout << L3.len << endl;
	
	int a;
	deleteList_Sq(L1, 2, a);
	printList_Sq(L1);
	cout << a << endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值