C语言数据结构关于栈的题

C语言数据结构关于栈的题,第1张

#include <stdio.h>

#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

}

此栈中的数据类型以整数为例


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12024023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存