数据结构基础
(第二章:堆栈)
一、堆栈介绍
堆栈又简称栈,是一种数据先进后出的数据结构(FILO)。便于理解,可将堆栈看作是一个放乒乓球的圆筒,将每个乒乓球看作是一个个数据,如图所示:
当以此放进1、2、3号乒乓球后,要想取出1号球就必须一次拿出3、2号球,每次拿出的球都是顶上的球,所以到时候我们的栈结构中也要设置一个数据记录top序号是多少。
二、堆栈的ADT(抽象数据类型)
很多同学可能对类class的运用还不太熟练,在这里我们使用struct进行定义并通过顺序结构实现!
代码如下:
typedef struct stack
{
int *arr;//这里我们使用静态分配;
int top;//用于记录顶部的序号;
int maxsize;//我们需要提前决定堆栈大小
}Stack;
三、堆栈的运算
一个数据结构必定有属于它自己的运算
这里我们重点介绍堆栈的创建、与销毁、数据的进栈,出栈和获取顶部元素
代码如下(示例):
1.堆栈的创建与销毁
void Creat(Stack *s,int max)
{
s->maxsize=max;
s->arr=new int[max];
s->top=-1;
}
void Destory(Stack *s)
{
free(s->arr);
s->top=-1;
}
2.堆栈的数据进栈与出栈
bool Getin(Stack *s,int x)
{
if(Isfull(s))
return false;
s->top+=1;
s->arr[s->top]=x;
return true;
}
bool Getout(Stack *s)
{
if(Isempty(s))
return false;
s->top-=1;
return true;
}
3.获取顶部元素
bool top(Stack *s,int &x)
{
if(Isempty(s))
{
cout<<"栈内无数据"<<endl;
return false;
}
x=s->arr[s->top];
return true;
}
四、链接实现
上面的实现我们用的是顺序实现,也就是数组。同时我们也可以使用链接实现,我们只简单列出堆栈的定义
但是链接实现的话我们不用提前规定堆栈的最长长度,链接形式可便于数据随时扩充添加!!
typedef struct node
{
int element;
int *next;
}Node;
typedef struct stack
{
Node *head;
int sum;//记录总的数据个数
}Stack;
类似于这样(纯手画,别介意哦)!
总结
掌握一种数据结构的要点就是它的定义与运算,画图理解也非常重要,今天的分享就到这里咯!