0
点赞
收藏
分享

微信扫一扫

【数据结构】堆排序

数据结构与栈

一、概念

1. 数据

2. 数据结构

3. 数据结构分类

二、栈

1. 栈

2. 相关概念

2.1 入栈

2.2 出栈

2.3 栈的特点

2.4 栈顶

2.5 栈底

2.6 栈顶元素

2.7 栈底元素

三、数组模拟栈

1. 初始化空栈

const int n = 100;
数据类型 s[n+1];
int top = 0;

2. 入栈

void push(数据类型 x)
{
    if (top < n) // 如果栈未满
    {
        s[++top] = x;
    }
    // 上溢处理...
}

3. 出栈

void pop()
{
    if (top > 0) // 如果不是空栈
    {
        top--;
    }
    // 下溢处理...
}

4. 获取栈顶元素

数据类型 getTop()
{
    return s[top];
}

5. 判断栈是否为空

bool isEmpty()
{
    return (top == 0); // top = 0 时是空栈
}

6. 获取栈内元素个数

int sizeStack()
{
    return top;
}

四、栈的运用

1. 括号的匹配

1.1 审题

题目描述

输入描述

输出描述

样例1

1.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;

char s[105];
char c;
int top;

int main() 
{
    freopen("bracket.in", "r", stdin);
    freopen("bracket.out", "w", stdout);
    
	while (cin >> c)
	{
	    if (c == '@')
	    {
	        break;
	    }
	    
	    if (c != '(' && c != ')')
	    {
	        continue;
	    }
	    
	    if (c == '(')
	    {
	        s[++top] = c;
	    }
	    else
	    {
	        if (top == 0)
	        {
	            cout << "NO" << endl;
	            return 0;
	        }
	        top--;
	    }
	}
	
	if (top == 0)
	{
	    cout << "YES";
	}
	else
	{
	    cout << "NO";
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

2. 括号的匹配 2.0

2.1 审题

题目描述

输入描述

输出描述

样例1

2.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;

char s[105];
char c;
int top;

int main() 
{
    freopen("bracket.in", "r", stdin);
    freopen("bracket.out", "w", stdout);
    
	while (cin >> c)
	{
	    if (c == '@')
	    {
	        break;
	    }
	    
	    if (c == '(')
	    {
	        s[++top] = c;
	    }
	    else if (c == '[')
	    {
	        if (s[top] == '(')
	        {
	            cout << "NO";
	            return 0;
	        }
	        else
	        {
	            s[++top] = c;
	        }
	    }
	    else if (c == ')')
	    {
	        if (s[top] == '(')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	    else if (c == ']')
	    {
	        if (s[top] == '[')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	}
	
	if (top == 0)
	{
	    cout << "YES";
	}
	else
	{
	    cout << "NO";
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

3. 括号的匹配 3.0

3.1 审题

题目描述

输入描述

输出描述

样例1

3.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;

char s[105];
char c;
int top;

int main() 
{
    freopen("bracket.in", "r", stdin);
    freopen("bracket.out", "w", stdout);
    
	while (cin >> c)
	{
	    if (c == '@')
	    {
	        break;
	    }
	    
	    if (c == '<')
	    {
	        s[++top] = c;
	    }
	    else if (c == '(')
	    {
	        if (s[top] == '<')
	        {
	            cout << "NO";
	            return 0;
	        }
	        else
	        {
	            s[++top] = c;
	        }
	    }
	    else if (c == '[')
	    {
	        if (s[top] == '(' || s[top] == '<')
	        {
	            cout << "NO";
	            return 0;
	        }
	        else
	        {
	            s[++top] = c;
	        }
	    }
	    else if (c == '{')
	    {
	        if (s[top] == '(' || s[top] == '[' || s[top] == '<')
	        {
	            cout << "NO";
	            return 0;
	        }
	        else
	        {
	            s[++top] = c;
	        }
	    }
	    else if (c == '>')
	    {
	        if (s[top] == '<')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	    else if (c == ')')
	    {
	        if (s[top] == '(')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	    else if (c == ']')
	    {
	        if (s[top] == '[')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	    else if (c == '}')
	    {
	        if (s[top] == '{')
	        {
	            top--;
	        }
	        else
	        {
	            cout << "NO";
	            return 0;
	        }
	    }
	}
	
	if (top == 0)
	{
	    cout << "YES";
	}
	else
	{
	    cout << "NO";
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}
举报

相关推荐

0 条评论