顺序表
#ifndef LIST_HPP
#define LIST_HPP
#include <iostream>
#include<memory.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
//typedef int T; //类型重命名
template <typename T>
//封装一个顺序表
class SeqList
{
private:
T *ptr; //指向堆区空间的起始地址
int size; //总长度
int len = 0; //当前顺序表实际长度
public:
void init(int n)
{
//在堆区申请出一个长度为n的空间,将其实地址赋值给ptr
this->ptr = new T[n];
//给len进行初始化
this->len = 0;
this->size = n;
}
//判空
bool empty()
{
return this->len == 0;
}
//判满
bool full()
{
return this->len == this->size;
}
//尾插
void push_back(T e)
{
//判断是否满了
if(this->full())
{
return ;
}
this->ptr[len++] = e;
}
//插入
void insert(T index)
{
//判断是否满了
if(this->full())
{
return ;
}
int i,m;
cout << "\n请输入要插入的位置:";
cin >> m;
//cout << "\n请输入要插入的数值:";
//cin >> index;
for(i=this->len; i>=m; i--)
{
this->ptr[i] = this->ptr[i-1];
}
this->ptr[i] = index;
this->len++;
}
//任意位置删除
void erase(int index)
{
if(empty() == 1)
{
return;
}
int i;
for(i = index - 1; i < this->len; i++)
{
this->ptr[i] = this->ptr[i+1];
}
this->len--;
}
//尾删
void pop_back(int index)
{
if(empty() == 1)
{
return;
}
int i;
for(i = 0; i < index; i++)
{
this->ptr[this->len--] = 0;
}
}
//求长度
void my_size()
{
cout << "长度为:" << this->len <<endl;
}
//获取任意位置元素
T & my_at(int index)
{
static T num;
num = this->ptr[index-1];
return num;
}
//将顺序表进行排序
void my_sort(bool flag)
{
int i,j;
if(flag)
{
for(i = 0; i < this->len; i++)
{
for(j = 0; j < this->len - 1- i;j++)
{
if(this->ptr[j]>this->ptr[j+1])
{
T temp = this->ptr[j];
this->ptr[j] = this->ptr[j+1];
this->ptr[j+1] = temp;
}
}
}
}
else
{
for(i = 0; i < this->len; i++)
{
for(j = 0; j < this->len - 1- i;j++)
{
if(this->ptr[j]<this->ptr[j+1])
{
T temp = this->ptr[j];
this->ptr[j] = this->ptr[j+1];
this->ptr[j+1] = temp;
}
}
}
}
}
//定义展示函数
void show()
{
//判空
if(empty() == 1)
{
return;
}
cout<<"当前顺序表中的元素分别是:";
for(int i=0; i<this->len; i++)
{
cout<<this->ptr[i]<<" ";
}
cout<<endl;
}
};
#endif
#include "list.hpp"
int main()
{
SeqList<int> sl; //实例化一个顺序表对象
sl.init(10); //申请空间
sl.push_back(1);
sl.push_back(2);
sl.push_back(3);
sl.push_back(4);
sl.push_back(5);
sl.push_back(6);
sl.show();
sl.insert(7);
sl.show();
sl.erase(3);
sl.show();
sl.pop_back(2);
sl.show();
sl.my_size();
cout << sl.my_at(3) << endl;
sl.my_sort(1);
sl.show();
sl.my_sort(0);
sl.show();
return 0;
}