数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
目录
1.栈的定义和特点
栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,成为栈项,相应地,表头端称为栈底(bottom)。不含元素的空表成为空栈。
假设栈S=(a1,a2,...,an),则称a1为栈底元素,an为栈顶元素。栈中元素按a1,a2,...an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈又称为 后进先出 的线性表。
2.队列的定义和特点
和栈相反,队列是一种先进后出的线性表。它只允许在表的一段进行插入,而在另一端删除元素。这和日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端成为队尾,允许删除的一端则成为队头。假设队列为q=(a1,a2,...,an),那么,a1就是队头元素,an则是队尾元素。队列中的元素是按照a1,a2,...,an的顺序进入的,退出队列也只能按照这个次序依次退出,也就是说,只有在a1,a2,...,an-1都离开队列之后,an才能退出队列。
3.栈的类型定义
栈的基本操作除了入栈和出栈外,还有栈的初始化、栈空的判定,以及取栈顶元素等。下面给出栈的抽象数据类型定义:
ADT STack{
数据对象:D={a,}
数据关心:R={<ai-1,ai>}
基本操作:
InStack(&S)
操作结果:构造一个空栈S。
DestyoyStack(&S)
初始条件:栈S已存在。
操作结果:栈S已被销毁。
ClearStack(&S)
初始条件:栈S已存在。
操作结果:栈S清为空栈。
StackEmpty(S)
初始条件:栈S已存在。
操作结果:若栈S为空栈,则返回true,否则返回false。
StackLength(S)
初始条件:栈S已存在
操作结果插入元素e为新的栈顶元素。
GetTop(S)
初始条件:栈S已存在且非空。
操作结果:返回S的栈项元素,不修改栈项指针。
Push(&S,e)
初始条件:栈S已存在。
操作结果:插入元素e为新的的元素
Pop(&S,&e)
初始条件:栈S已存在且非空。
操作结果:删除S的栈顶元素,并且e返回其值。
StackTraverse(S)
初始条件:栈S已存在且非空。
操作结果:从栈底到栈顶依次对S的每个数据元素访问。
}ADT Stack
4.顺序栈的表示和实现
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常习惯的做法是:以top=0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C语言作描述语言时,如此设定会带来极大的不便,因此另设指针base指示栈底元素在顺序栈中的位置,当top和base的值相等时,表示空栈。顺序栈的定义如下:
#define MAXSIZE 100 //顺序栈存储空间的初始分配量
typedef struct
{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int Stacksize; //栈可用的最大容量
}SqStack;
1.初始化
Status InitStack(SqStack &S)
{//构造一个空栈
S.base=new SElemType[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if(!S.base)exit(OVERFLOW); //存储分配失败
S.top=S.base; //top初始为base,空栈
S.stacksize=MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
return OK;
}
2.入栈
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base==S.stacksize) return ERROR; //栈满
*S.top++=e; //将元素e压入栈顶,栈顶指针加1
return OK;
}
3.出栈
Status Pop(SqStack &S,SElemType &e)
{//删除S的栈顶元素,用e返回其值
if(S.top==S.base) return ERROR; //栈空
e=*--S.top; //栈顶指针减1,将栈顶元素赋给e
return OK;
}
4.取栈顶元素
SElemType GetTop(SqStack S)
{//返回S的栈顶元素,不修改栈顶指针
if(S.top!=S.base) //栈非空
reuturn *(S.top-1); //返回栈顶元素的值,栈顶指针不变
}
5.小总结
本次内容主要了讲解了数据结构中的一些基础知识点,主要内容顺序表的有关知识本篇内容都为数据结构的基本思想,若想更深的理解以及体会,还请大家在日常学习中多多努力,希望大家学有所成。