顺序表

顺序表:
顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间
不允许有空值,插入、删除时需要移动大量元素。 顺序表的三个要素:
1. 用 elems 记录存储位置的基地址;
2. 分配一段连续的存储空间 size ;
3. 用 length 记录实际的元素个数,即顺序表的长度;
4. 在企业中配合时间戳使用,应用于管理客户端连接超时;
代码展示:

#include <iostream>
#include <exception>//异常机制抛出头文件

using namespace std;

#define MAX_SIZE   100 //顺序表最大的空间
//定义一个顺序表结构体
typedef struct {
	int* elem;//顺序表的分配空间
	int len;  //顺序表长度,元素的总数量
	int size; //顺序表的空间大小
}SQ_list;

//顺序表初始化
void initSQ_list(SQ_list& list) {
	//给顺序表分配内存
	list.elem = new int[MAX_SIZE];
	if (!list.elem) {
		throw bad_alloc();//内存分配失败,抛出的错误
	}
	list.len = 0;
	list.size = MAX_SIZE;
}

//打印顺序表
void printSQ_list(SQ_list&list) {
	cout << "顺序表的大小:" << list.size << ",顺序表的元素个数:" << list.len << endl;
	for (int i = 0; i < list.len; i++) {
		cout << list.elem[i] << ",";
	}
	cout << endl;
}

//添加元素
bool addSQ_list(SQ_list& list, int number) {
	if (list.len == list.size) {
		throw new string("空间已满!");
	}
	list.elem[list.len] = number;
	list.len++;

	return true;
}

//插入元素
bool insertSQ_list(SQ_list& list, int seat, int data) {
	if (seat < 0 || seat >= list.len || list.len == list.size) {
		throw new string("数据越界");
	}
	for (int i = list.len-1; i >= seat; i--) {
		list.elem[i+1] = list.elem[i];
	}
	list.elem[seat] = data;
	list.len++;
	return true;
}

//删除元素
bool deleteSQ_list(SQ_list& list, int seat) {
	if (list.len == NULL||seat<0||seat>list.len) {
		//throw new string("没有可以删除的元素");
		cout << "没有可以删除的元素!" << endl;
		return false;
	}
	if (seat == list.len-1) {
		list.len--;
		return true;
	}
	for (int i = seat; i < list.len;i++) {
		list.elem[i] = list.elem[i+1];
	}
	list.len--;
	return true;
}

//销毁顺序表
void destroySQ_list(SQ_list&list) {
	delete[]list.elem;
	list.len = 0;
	list.size = 0;
}

//定义一个顺序表的类
template<typename T>
class Sqlist {
public:
	//构造函数
	Sqlist() {
		this->elem = new T[MAX_SIZE];
		this->lenght = 0;
		this->size = 0;
	}
	//初始化
	bool SqlistInit() {
		elem = new T[MAX_SIZE];
		if (!elem) {
			cout << "动态内存分配失败!" << endl;
			return false;
		}
		lenght = 0;
		size = MAX_SIZE;
		return true;
	}
	//打印函数
	void SqlistPrint() {
		cout << "顺序表长度:" << lenght << "\n顺序表总空间:" << size << endl;
		cout << "元素:";
		for (int i = 0; i < lenght; i++) {
			cout << elem[i] << ",";
		}
		cout << endl;
	}
	//添加元素
	bool SqlistAdd(int number) {
		if (lenght == size) {
			cout << "空间已满,添加元素失败" << endl;
			return false;
		}
		elem[lenght] = number;
		lenght++;
		return true;
	}
	//插入元素
	bool SqlistInsert(int seat, int number) {
		if (seat < 0 || seat>lenght || lenght == size) {
			cout << "插入失败" << endl;
			return false;
		}
		for (int i = lenght; i >= seat; i--) {
			elem[i + 1] = elem[i];//元素往后移动一个位置
		}
		elem[seat] = number;
		lenght++;
		return true;
	}
	//删除元素
	bool SqlistDelete(int seat) {
		if (seat<0 || seat>lenght || lenght == NULL) {
			cout << "没有可删除的元素" << endl;
			return false;
		}
		if (seat == lenght-1) {
			lenght--;
			return true;
		}
		for (int i = seat; i < lenght; i++) {
			elem[i] = elem[i+1];//元素往前移动一个位置
		}
		lenght--;
		return true;
	}
	~Sqlist() {
		if (elem) {
			delete[]elem;
			elem = NULL;
			lenght = 0;
			size = 0;
		}
	}

protected:
	T* elem;//顺序表元素存放的空间
	int lenght;//顺序表长度
	int size;//顺序表总空间
};
//时间戳结构体
typedef struct{
	int fd;//连接的窗口句柄
	time_t count;//使用超时时刻的时间戳表示
}Timelist;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值