基本定义:
栈(Stack)是n个元素a1,a2,…an,组成的有限序列,记作S =(a1,a2,…,an),并且只能在一端插入和删除元素,n=0时称为空栈。
栈的特征:
由于栈只能从一端插入和删除元素,故栈具有后进先出(Last in,first out,LIFO)的特性。称插入和删除的一端为栈顶(top),另一端为栈底(bottom)。称插入元素为入栈或压栈(push),删除元素为出栈或弹栈(pop)。
栈的基本运算定义:
栈初始化:Init_Stack() 初始条件:栈不存在 操作结果:构造了一个空栈 判断空: Empty_Stack() 若栈空,则返回为1,否则返回0
入栈: Push_Stack(S,x) 初始条件:栈S已经存在 操作结果:在栈S的顶部插入一个元素x,这样x就、成为新的栈顶元素。
出栈: Pop_Stack(S,&x) 初始条件:栈S存在且不为空 操作结果:栈S的顶部元素从栈顶删除,保存在变量x中
取栈顶元素: GetTop_Stack(S) 初始条件:栈s存在且不为空 操作结果:返回栈S的栈顶元素,且原栈的结构不会变化
销毁栈: Destory_Stack(S) 初始条件:栈S已经存在 操作结果: 销毁一个已经存在的栈
栈的存储方式:(1)顺序存储 (2)链式存储
下面分别实现这两种栈的存储方式:
栈(Stack)是n个元素a1,a2,…an,组成的有限序列,记作S =(a1,a2,…,an),并且只能在一端插入和删除元素,n=0时称为空栈。
栈的特征:
由于栈只能从一端插入和删除元素,故栈具有后进先出(Last in,first out,LIFO)的特性。称插入和删除的一端为栈顶(top),另一端为栈底(bottom)。称插入元素为入栈或压栈(push),删除元素为出栈或弹栈(pop)。
栈的基本运算定义:
栈初始化:Init_Stack() 初始条件:栈不存在 操作结果:构造了一个空栈 判断空: Empty_Stack() 若栈空,则返回为1,否则返回0
入栈: Push_Stack(S,x) 初始条件:栈S已经存在 操作结果:在栈S的顶部插入一个元素x,这样x就、成为新的栈顶元素。
出栈: Pop_Stack(S,&x) 初始条件:栈S存在且不为空 操作结果:栈S的顶部元素从栈顶删除,保存在变量x中
取栈顶元素: GetTop_Stack(S) 初始条件:栈s存在且不为空 操作结果:返回栈S的栈顶元素,且原栈的结构不会变化
销毁栈: Destory_Stack(S) 初始条件:栈S已经存在 操作结果: 销毁一个已经存在的栈
栈的存储方式:(1)顺序存储 (2)链式存储
下面分别实现这两种栈的存储方式:
1、链式存储
// 栈.cpp : 定义控制台应用程序的入口点。
//实现栈的创建,增、删、查、改
#include "stdafx.h"
#include<iostream>
#include<ctype.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}Dnode;
//初始化栈
void InitStack(Dnode *&S)
{
Dnode *top;
top = (Dnode*)malloc(sizeof(Dnode));
if (top == NULL)
{
cout << "内存分配失败!" << endl;
exit(0);
}
top->next = NULL;
S = top;
}
//向栈中添加数据,输入非数字结束
void InitData(Dnode *S)
{
Dnode *top=S,*p;
int e;
int i = 1;
cout << "请输入第"<<i++<<"个数据:" ;
cin >