顺序表:
顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间
不允许有空值,插入、删除时需要移动大量元素。 顺序表的三个要素:
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;