栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

大一下 数据结构 清华严蔚敏(C语言)版 学习记录——栈和队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大一下 数据结构 清华严蔚敏(C语言)版 学习记录——栈和队列

#include
#define STACK_INIT_SIZE 100//栈的长度
#define STACKINCREMENT 10//每次增加的长度
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef char SElemType;
typedef int Status;
//---------------------------------------结构体定义区--------------------------------
typedef struct {
	SElemType *base;//栈底指针,栈构造前和销毁后都为空
	SElemType *top;//栈顶指针,指向栈顶元素的下一位置
	int stacksize;//当前分配的栈的存储空间数
}SqStack;
//----------------------------------------函数定义区---------------------------------
Status GetTop(SqStack S,SElemType &e)
{
	if(S.top==S.base) return ERROR;
	e=*(S.top-1);
	return OK;
}

Status InitStack(SqStack &S)//初始化函数
{
	S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S.base) exit(OVERFLOW);//代码健壮性检验
	S.top= S.base;//赋初值——栈顶=栈尾
	S.stacksize = STACK_INIT_SIZE;//栈长初始化
	return OK;
}

Status StackEmpty(SqStack S)//栈空函数
{
	return S.top == S.base;//栈空时候头为尾
}

Status Push(SqStack &S, SElemType e)//压栈函数
{
	if(S.top - S.base>=S.stacksize)
	    return ERROR;
    *S.top++ = e;//向top指针指向的空间赋值,赋完后指针top后移一位
    return OK;
}

Status Pop(SqStack &S, SElemType &e)//弹出函数
{
	if(S.base == S.top) return ERROR;
	e = *--S.top;
	return OK;
}

Status Match(char *st)//匹配括号函数
{
	SqStack S;
	InitStack(S);
	SElemType e;
	int flag = 1,i = 0;
	while(st[i])
	{
		switch(st[i])//字符串有值
		{
			case '(':
			case '[':
			case '{':
			    Push(S,st[i]);//只要是左括号就全压入栈
			    break;
            case ')':
            case '}':
            case ']':
                if(StackEmpty(S))//如果栈是空的话(右括号先进来的情况),flag=0
                {
                	flag = 0;
                	break;
                }
                Pop(S,e);
                if(!(e == '('&&st[i] == ')'||e == '['&&st[i] == ']'||e == '{'&&st[i] == '}'))
                {//左右不匹配的情况
                	flag = 0;
                	break;
                }
		}
		if(!flag) break;
		i++;
	}
	if(flag && StackEmpty(S))//标志为True且所有括号匹配完
	    return true;
    else
        return false;
}
//--------------------------------------主函数区---------------------------------------
int main(){
	char st[1000];
	while(gets(st))
	{
		if(Match(st)) printf("yesn");
		else printf("non");
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号