C++实现顺序表及其应用


#include<iostream>
using namespace std;
#define MAXSIZE 100
#define STEP 10


typedef struct {
	int* data;
	int length;
	int maxsize;
}sqlist;


//初始化
void Init(sqlist &s) {//引用,使得s位常态t
	/*if (s.data != NULL)
	{
		delete[] s.data;
	}*/
	s.data = new int[MAXSIZE];
	s.length = 0;
	s.maxsize = MAXSIZE;
}

//插入函数;
bool Insert(sqlist &s, int pos, int value) {

	if (pos > s.length + 1 || pos < 0) {
		cout << "插入位置错误" << endl;
	}

	if (s.length == s.maxsize) {
		int *interdata = new int[s.maxsize + STEP];
		for (int i = 0; i < s.maxsize; i++)
		{
			interdata[i] = s.data[i];

		}
		s.data = interdata;
		s.maxsize = s.maxsize + STEP;
	}
	for (int i = s.length; i >= pos; i--)
	{
		s.data[i] = s.data[i - 1];

	}

	s.data[pos - 1] = value;
	s.length = s.length + 1;
	return true;

}

//按位删除函数
bool Delete(sqlist &s, int pos, int &e) {
	if (s.length == 0) {
		return false;
		cout << "顺序表内无元素" << endl;
	}
	e = s.data[pos - 1];
	for (int i = pos; i <= s.length; i++)
	{
		s.data[i - 1] = s.data[i];
	}
	s.length--;
	return true;
}

//按值查找,查找成功返回值所处的位置,失败返回 false;
bool LocateElem(sqlist &s, int e, int &pos) {
	for (int i = 0; i < s.length; i++) {
		if (s.data[i] == e) {
			pos = i + 1;
			return false;
		}
	}
	return true;
}
//输出函数
void Output(sqlist &s) {
	cout << "当前顺序表长度:" << s.length << endl;
	cout << "顺序表中的数据为:";
	for (int i = 0; i < s.length; i++)
	{

		cout << s.data[i] << ",";
	}
	cout << endl;
}

//删除线性表,并释放空间;
void Release(sqlist &s) {
	delete[] s.data;
}

//按位置查询,返回表中第pos个元素;
int Read(sqlist &s, int pos) {
	return s.data[pos - 1];
}


bool DeleteMinElem(sqlist &l, int &value) {
	if (l.length == 0) {
		cout << "表空!" << endl;
		return false;
	}
	//找出最小值
	int min = l.data[0];
	int minindex = 0;
	for (int i = 0; i < l.length; i++) {
		if (min > l.data[i]) {
			min = l.data[i];
			minindex = i;
		}
	}
	//删除最小值
	value = min;
	l.data[minindex] = l.data[l.length - 1];
	l.length--;
	return true;

}


int main() {
	int value;//用value存储从表中删除的元素

	//定义顺序表
	cout << "顺序表" << endl;
	sqlist s;
	Init(s);
	cout << endl;
	
	//输出空的顺序表
	Output(s);
	cout << endl;

	cout << "删除表头元素:" << endl;
	DeleteMinElem(s, value);
	Output(s);
	cout << endl;

	//将一些元素插入顺序表,头插
	cout << "将一些元素插入表中:" << endl;
	cout << endl;
	Insert(s, 1, 10);
	Insert(s, 1, 20);
	Insert(s, 1, 12);
	Insert(s, 1, 9);
	Insert(s, 1, 1);
	Output(s);
	cout << endl;

	//删除表头的两个元素
	cout << "删除表头的两个元素:" << endl;
	DeleteMinElem(s, value);
	DeleteMinElem(s, value);
	Output(s);
	cout << endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值