一.栈的定义和特点
定义:1.栈是限定仅在表尾进行插入和删除的顺序表
2.对栈来说,表尾端有其特殊含义,称为栈顶,表头端称为栈底
3.不含元素的栈称为空栈
特点:1.栈具有先进后出的特点
2.栈区的空间会自动释放

二.顺序栈的表示和操作实现
定义:顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的元素
顺序栈的存储结构:
#define MAXSIZE 100
typedef struct Stack{
elemtype *top;//栈顶指针
elemtype *base;//栈底指针
int stacksize;//栈的最大尺寸
}
初始化:
1.给栈申请一片空间
2.将设置为空战,栈顶指针等于栈底指针
3.将MAXSIZE赋值给stacksize
Status SetStack(Stack *S)
{
S->base = (Stack*)malloc(sizeof(Stack)*MAXSIZE);//为栈申请一块大小为MAXSIZE的空间
if(!S->base) return 0;//空间申请失败返回0
S->top = S->base;//top初始化为base空栈
S->stacksize = MAXSIZE://栈的最大空间为MAXSIZE
}
入栈:
1.判断栈是否满,若满返回0
2.将新元素入栈,栈顶指针加1
Status Push_Stack(Stack *S,elemtype e)
{
if(S->top-S->base==MAXSIZE) return 0;//判断栈是否满了
*S->top = e;//将元素的值赋值给top
S->top++;//top加1
}
出栈:
1.判断栈是否为空,为空返回0
2.栈顶指针减1,栈顶元素出栈
Status Pop_Stack(Stack *S)
{
if(S->base==S->top) return 0;//判断栈是否为空
S->top--;//栈顶元素减1
return *S->top;//返回栈顶元素
}
三.链栈的表示和实现
定义:链栈是指采用链式存储结构实现的栈,通常用单链表来表示,以单链表的头部作为顶最为方便,而且没必要像单链表那样为了操作方便附加一个头结点
链栈的存储结构:
typedef struct StackLink
{
elemtype data;//数据域
StackLink *next;//指针域
}
初始化:
构造一个空栈,直接将栈顶指针置空
Status Set_linkStack(Stack *S)
{
S = NULL;
return 1;
}
链栈的入栈:
1.创造一个新的结点
2.将元素赋值给数据域
3.将新结点插入栈顶
4.修改栈顶元素为新结点
Status Push_Stack(Stack *S,elemtype e)
{
Stack *P = (Stack *)malloc(sizeof(Stack));
P->data = e;
P->next = S;
S = P;
return 1;
}
链栈的出栈:
1.先判断栈是否为空,为空返回0
2.将栈顶元素赋值给e
3.修改栈顶指针,指向新的栈顶元素
4.释放原栈顶元素空间
Status Pop_Stack(Stack *S,elemtype e)
{
Stack *P;
e = S->data;
P = S;
S = S->next;
free(P);
return e;
}
取栈顶元素:
Status GetPop(stack S)
{
if(S!=NULL)
return S->data;
}
1万+

被折叠的 条评论
为什么被折叠?



