进栈出栈初始化栈
* 栈的顺序存储结构
-
判断栈空的条件 : s -> top == -1;
-
栈满的条件: s -> top == Maxsize - 1;(data 数组的最大下标)
-
进栈操作: s ->top ++; s ->data[s ->top] = x;无需再传参回到主函数
-
出栈操作:x = s ->data[s ->top];s -> top –;;需传参回到主函数**
#include<stdio.h>
#include<malloc.h>
#define Maxsize 50
typedef int Elemtype;
typedef struct
{
Elemtype data[Maxsize];
int top;
}Sqstruct;
//初始化栈
void Initstruct(Sqstruct*& s)
{
s = (Sqstruct*)malloc(sizeof(Sqstruct));
s->top = -1;//栈顶指针初始为-1
}
//进栈
bool pushstruct(Sqstruct*& s, Elemtype x)
{
if (s->top == Maxsize - 1)//判断栈是否满
{
return false;
}
s->top++; //先让栈顶指针加一,在存放元素;
s->data[s->top] = x;
return true;
}
//出栈
bool popstruct(Sqstruct*& s, Elemtype& x)
{
if (s->top == -1) //判断栈是否为空
{
return false;
}
x = s->data[s->top]; //先让栈顶元素出栈,再让栈顶指针减减;
s->top--;
return true;
}
*** 栈的链式存储结构
栈空 s ->next ==NULL;
栈满:在链式存储结构中可以不考虑
元素 进栈操作:1.p = malloc;2.p -> data =e;3.p -> next = s -> next ;4.s ->next =p;
取栈顶元素操作 : e = s -> next -> data,
出栈操作:1.判断栈是否为空(s -> next ==NULL) 2.p = s-> next;e = p -> data;s->next = p ->next;free(p)**
#include<stdio.h>
#include<malloc.h>
typedef int Elemtype;
typedef struct Linkedstack
{
Elemtype data;
struct Linkedstack* next;
}Ls;
//头插法建立栈
void Pushstack(Ls*& s, Elemtype e)
{
Ls* p;
p = (Ls*)malloc(sizeof(Ls));//申请空间用来存放结点
p->data = e;
p->next = s->next; //将 p 结点作为头结点插入
s->next = p;
}
//从头结点开始删除一个元素
bool popstack(Ls*& s, Elemtype& e)
{
Ls* p;
if (s->next == NULL)
{
return false;
}
p = s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
}
//取栈顶元素
bool getstack(Ls*& s, Elemtype& e)
{
if (s->next == NULL)
{
return false;
}
e = s->next->data;//取出头结点
return true;
}
括号的匹配
bool Flage(char a[],int n)
{
int i =0;char e;
bool flage = true;
LS *st;
InitStack(st);
while (i < n && flage)
{
if(a[i] =='(' || a[i] == '{' || a[i] == '[')
push(st,e[i]);
if(a[i] == ')')
{
if(Get(st,e))
{
if(e =='(') pop(st,e);
else flage =false;
}
flage = false;
}
if(a[i] =='}')
{
if(Get(st,e))
{
if(e == '{') pop(st,e);
else flage = false;
}
flage = false;
}
if(a[i]==']')
{
if(GetTop(st,e))
{
if(e == '[') pop(st,e);
else flage =false;
}
flage = false;
}
i ++;
}
if (!StackEmpty(st)) flage = false;
DestoryStack(st);
return flage;
}