#include <stdlib.h>
#include <string.h>
typedef int DataType
typedef struct node{
DataType data
struct node * next
}Stack
Stack* CreateStack() //创建栈
void StackEmpty(Stack* ) //清空栈
void DestoryStack(Stack*)//撤销(删除)栈
int IsEmpty(Stack*) //判空
int PushStack(Stack*, DataType) //入栈
int PopStack(Stack*) //出栈
DataType GetTopElement(Stack*)//取栈顶元素
Stack* CreateStack()
{
Stack *stack = (Stack*)malloc(sizeof(Stack))
if(NULL != stack)
{
stack->next = NULL
return stack
}
printf("out of place.\n")
return NULL
}
//清空栈
void StackEmpty(Stack* stack)
{
while(!IsEmpty(stack))
{
PopStack(stack)
}
printf("now stack is empty. \n")
}
//撤销栈
void DestoryStack(Stack* stack)
{
free(stack)
exit(0)
}
int IsEmpty(Stack* stack)
{
return (stack->next == 0)
}
//入栈,成功返回1,失败返回0, 把元素 data 存入 栈 stack 中
int PushStack(Stack* stack, DataType data)
{
Stack* newst = (Stack*)malloc(sizeof(Stack))
if(NULL != newst)
{
newst->data = data
newst->next = stack->next //s->next = NULL
stack->next = newst
return 1
}
printf("out of place PushStack.\n")
return 0
}
/*
出栈,成功返回1,失败返回0,出栈不取出元素值,只是删除栈顶元素。
如出栈要实现,取出元素值,并释放空间,可结合取栈顶元素函数做修改,这里不再给出。
*/
int PopStack(Stack* stack)
{
Stack* tmpst
if(!IsEmpty(stack))
{
tmpst = stack->next
stack->next = tmpst->next
free(tmpst)
return 1
}
return 0
}
//取栈顶元素,仅取出栈顶元素的值,取出之后,该元素,任然存在栈中。成功返回元素值,失败输出提示信息,并返回 -1
DataType GetTopElement(Stack* stack)
{
if(!IsEmpty(stack))
{
return stack->next->data
}
printf("stack is empty GetTopElement.\n")
return -1
}
int main()
{
Stack* stack = CreateStack()
char str[200]
printf("请输入字符串:")
scanf("%s", str)
int num = 0
for (int i = 0i <strlen(str)i++) {
if (!IsEmpty(stack) &&GetTopElement(stack) == '(' &&str[i] == ')') {
PopStack(stack)
num++
} else {
PushStack(stack, str[i])
}
}
if (!IsEmpty(stack)) {
num = -1
}
printf("匹配结果:%d", num)
DestoryStack(stack)
return 1
}
#include <stdio.h>#include <stdlib.h>
#define MAXNUM 100
typedef struct
{
int data[MAXNUM]
int top1,top2
int size
}Stack
//初始化
int initStack(Stack * S)
{
S->size =MAXNUM
S->top1 =-1
S->top2 =MAXNUM
return 1
}
//进栈
int EnStack(Stack * S,int x,int i)
{
if(S->top1 +1==S->top2 )
return 0//栈已满
if(i==1)
S->data [++S->top1 ]=x
else if(i==2)
S->data [--S->top2 ]=x
else
return 0
}
//出栈
int DeStack(Stack * S,int i )
{
if(i!=1&&i!=2)
return 0
if(i==1)
{
if(S->top1 ==-1)
return 0//1栈为空
S->top1 --
}
else
{
if(S->top2 ==MAXNUM)
return 0//2栈为空
S->top2 ++
}
return 1
}
此栈中的数据类型以整数为例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)