数据结构

发布时间 2023-11-02 08:19:54作者: zhuwen

栈的定义

栈(Stack)是只允许在一端进行插入或删除操作的线性表

栈的操作

- 用数组模拟栈

从0开始
top=0;  //初始化
top     //元素个数
if(top==0)	//判断栈为空
st[top++]=x	//入栈
top--    //出栈
st[top-1]	//取栈顶

从-1开始
top=-1;  //初始化
top+1    //元素个数
if(top==-1)	//判断栈为空
st[++top]=x	//入栈
top--    //出栈
st[top]	//取栈顶

- STL栈

//STL栈
stack<int > st;
st.push()  //入栈
st.pop()   //出栈
st.top()   //取栈顶
st.empty() //判断栈为空
st.size()  //元素个数

链表

链表的定义

链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成:链表由一系列结点组成
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

由于链表的存储方式并不是连续的内存空间,因此 链表list中的迭代器只支持前移和后移,属于双向迭代器

链表的操作

- 用数组模拟链表

//数组链表

void push_front(int x)  //头插
{
	ver[++tot]=x;
	nxt[tot]=head;
	head=tot;
}

void push_back(int x,int k)  //尾插
{
	ver[++tot]=x;
	nxt[tot]=nxt[k];
	nxt[k]=tot;
}

void erase(int x)   //删除
{
	nxt[x]=nxt[nxt[x]];
}

STL链表

//STL链表
list<int > l  //定义
l.push_back(elem);			//在容器尾部加入一个元素
l.pop_back();				//删除容器中最后一个元素
l.push_front(elem);			//在容器开头插入一个元素
l.pop_front();				//从容器开头移除第一个元素
l.insert(pos,elem);			//在pos位置插入elem元素的拷贝,返回新数据的位置。
l.insert(pos,n,elem);		//在pos位置插入n个elem数据,无返回值。
l.insert(pos,beg,end);		//在pos位置插入,[beg,end)区间的数据(包含开头,不含结尾),无返回值。
l.clear();					//移除容器的所有数据
l.erase(beg,end);			//删除[beg,end)区间的数据,返回下一个数据的位置。
l.erase(pos);				//删除pos位置的数据,返回下一个数据的位置。
l.remove(elem);				//删除容器中所有与elem值匹配的元素。
l.size();   				//返回链表内的元素个数
l.empty();					//判断容器是否为空
l.front(); 					//返回第一个元素。
l.back();    				//返回最后一个元素。