赞
踩
优点:
缺点:
优点:
缺点:
栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。
允许插入和删除运算的一端称为栈顶(top),不允许插入和删除的另一端称为栈底(bottom)。
在栈顶进行的插入操作称为入栈或进栈(push),在栈顶进行的删除操作称为出栈或退栈(pop)
特点:后进先出(LIFO, Last In First Out)。
InitStack(&s):初始化栈。构造一个空栈s。
DestroyStack(&s):销毁栈。释放栈s占用的存储空间。
StackEmpty(s):判断栈是否为空:若栈s为空,则返回真;否则返回假。
Push(&S,e):进栈。将元素e插入到栈s中作为栈顶元素。
Pop(&s,&e):出栈。从栈s中退出栈顶元素,并将其值赋给e。
GetTop(s,&e):取栈顶元素。返回当前的栈顶元素,并将其值赋给e。
#define MaxSize 100 // 定义常量MaxSize为100,作为栈的最大容量
// 定义ElemType类型,这里假设ElemType是某种基本数据类型,比如int
typedef int ElemType;
// 定义顺序栈的结构体
typedef struct {
ElemType data[MaxSize]; // 一个数组,用于存储栈中的元素,大小为MaxSize
int top; // 一个整型变量,用于指向栈顶元素的索引
} SqStack; // 用typedef为这个结构体定义一个新的类型名SqStack,代表顺序栈
MaxSize为顺序栈的最大容量;
top为栈顶元素的下标,0 <= top <= MaxSize-1
栈空:top = -1;
栈满:top = MaxSize-1
②栈顶下标增一,指向新的栈顶位置;
③将新元素置于栈顶。
bool Push(SqStack &S, ElemType item)
{
if (S.top == MaxSize - 1)
{
cout << "栈满" << endl;
return false;
}
S.top++;
S.data[S.top] = item;
return true;
}
操作步骤:
①判断栈是否为空,若空则产生下溢出错误,退出算法,否则执行第②步;
②栈顶元素出栈;
③栈顶下标减一,指向新的栈顶位置;
bool Pop(SqStack &S, ElemType &item)
{
if (S.top == -1)
{
cout << "栈空" << endl;
return false;
}
item = S.data[S.top];
S.top--;
return true;
}
typedef struct LNode
{
ElemType data; //数据域
struct LNode *next; //后继结点指针
} LinkStNode; //链栈结点类型
bool Push(LinkStNode *S, ElemType item)
{ //带头结点单链表的表头插入法
LinkStNode *t = new LinkStNode; //①生成新结点
if (t == NULL)
{
cout << "内存不足";
return false;
}
t->data = item;
//②在栈顶插入新结点
t->next = S->next;
S->next = t; //③
return true;
}
bool Pop(LinkStNode *S, ElemType &item)
{ //删除单链表的第一个元素结点
//①判断栈是否为空
if (S->next == NULL)
{
cout << "栈空";
return false;
}
//②删除栈顶元素
LinkStNode *t = S->next;
S->next = t->next;
item = t->data;
delete t;
return true;
}
void Convert(int num, int d)
{ //num为待转换数,d为进制
SqStack S; ElemType result; int r; //余数
char ch[] = "0123456789ABCDEF"; //进制所使用的字符
InitStack(S);
while (num != 0)
{ r = num % d; //取余数r
Push(S, ch[r]); //余数入栈
num = num / d; //利用商进行下一次运算
}
while (!StackEmpty(S))
{ Pop(S, result);
cout << result;
}
}
算术表达式的定义:任何一个表达式都是由操作数、运算符和界限符组成。
算术表达式的三种形式:前缀、中缀、后缀。
中缀表达式的运算规则和特点。
后缀表达式的特点与运算规则。
用到的数据结构:
char数组 str1:存放中缀表达式,以 # 结尾;
char数组 str2:存放转换后的后缀表达式;
char型栈 S:存放运算符,包括 * / + - ( #
其中,* / 优先级设为2,
+ - 优先级设为1,
为处理方便,将 ( 优先级设为3,# 优先级设为0
while(str1[i] != ‘\0’)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。