王道数据结构之栈和队列
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
1.栈
观念:链表尾插麻烦 数组头插麻烦
栈:只能在一段插入或者删除操作,会导致局部逆序
top栈顶:允许插入和删除数据的一端
数组栈:数组尾部做栈顶,这样无需移动数据
链表栈:链表头部做栈顶,链表找尾麻烦。
栈:先进后出(last in first out)LIFO
1.1 局部逆序
1.2 数组栈
#define MaxSize 10
typedef struct {
int data[Maxsize];
int top;
};
top有二种表示方法:
方法1:top从-1开始,top下标指向数组数组的末尾元素
方法2:top从0开始,top下标指向数组数组的末尾元素的下一个元素(空元素),也就是size。size表示有效元素个数,做下标时表示,数组末尾后面的元素
1.3 数组栈的入栈
top从0开始,指向数组末尾的下一个元素,size指向的位置
bool push(SqStack *phead,int e)
{
s=*phead;
if(s.top ==maxsize)
retrun false;
s.data[s.top] = e;
s,top++;
return true;
}
top从-1开始,指向数组末尾的元素,在数组最后面在插入一个数据,需要先把指向数组末尾的元素top向后面移动,空一格位置,
bool push(SqStack *phead,int e)
{
s=*phead;
if(s.top ==maxsize-1)
retrun false;
s,top++;
s.data[s.top] = e;
return true;
}