✨✨大家好呀!博主这几天正在用C语言学习简单的数据结构😇😇
🌀🌀刚好学习到了栈和队列,学了这么久,想着能不能找几道题来做做😥😥
🌝🌝虽说用C语言做题着实很痛苦💫💫,被小小地打击了一下😟😟
🐸🐸但也加深了博主对数据结构的理解,下面整理了几道栈和队列的题与大家分享。🌏🌏
山外青山楼外楼,自然探秘永无休
成功易使人陶醉,莫把百尺当尽头

😊0.前言😊
前提知识:
C语言实现栈和队列
💥1.栈和队列面试题💥
🌎1.1 括号匹配问题🌎
题目链接
思路分析:初始化栈,如果是左括号就入栈,如果是右括号就出栈一个左括号元素,出栈了之后与右括号进行匹配,如果不匹配就return false,匹配就继续比。如果左右括号的数量不相等怎么办呢?只要在最后判断一下栈是否为空就行了,栈为空return true;栈不为空,return false;另外只有右括号时也要单独判断一下,因为只有右括号,栈就是空了,此时再出栈就越界了。
💫友情提醒,return之前别忘了free哦,防止内存泄漏,养成好习惯。💫

//C语言实现栈
/******************************************************************************************/
typedef char STDataType;
typedef struct Stack
{
STDataType* a;
int top; // 栈顶的位置
int capacity; // 容量
}ST;
void StackInit(ST* ps);
void StackDestory(ST* ps);
void StackPush(ST* ps, STDataType x);
void StackPop(ST* ps);
bool StackEmpty(ST* ps);
STDataType StackTop(ST* ps);
void StackInit(ST* ps)
{
assert(ps);
ps->a = NULL;
ps->top = 0;
ps->capacity = 0;
}
void StackDestroy(ST* ps)
{
assert(ps);
free(ps->a);
ps->a = NULL;
ps->capacity = ps->top = 0;
}
void StackPush(ST* ps, STDataType x)
{
assert(ps);
if (ps->top == ps->capacity)
{
int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
ps->a = (STDataType*)realloc(ps->a, newCapacity* sizeof(STDataType));
if (ps->a == NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->capacity = newCapacity;
}
ps->a[ps->top] = x;
ps->top++;
}
void StackPop(ST* ps)
{
assert(ps);
assert(ps->top > 0);
--ps->top;
}
bool StackEmpty(ST* ps)
{
assert(ps);
return ps->top == 0;
}
STDataType StackTop(ST* ps)
{
assert(ps);
assert(ps->top > 0);
return ps->a[ps->top - 1];
}
/******************************************************************************************/
//做题
bool isValid(char * s)
{
ST st;
StackInit(&st);
while(*s)
{
//如果是左括号就入栈
if(*s == '[' || *s == '(' || *s == '{')
{
StackPush(&st, *s);
++s;
}
else
{
//只有右括号,匹配失败
if(StackEmpty(&st))
return false;
//如果是右括号,出栈一个左括号进行匹配
char top = StackTop(&st);
StackPop(&st);
if((*s==']' && top !='[')
||(*s=='}' && top !='{')
||(*s==')' && top !='('))
{
//匹配失败,return false,return之前销毁栈防止内存泄漏
StackDestroy(&st);
return fal

本文通过实战案例深入解析了使用C语言实现栈和队列的方法,包括括号匹配问题、栈与队列的相互转换及循环队列的设计。
最低0.47元/天 解锁文章
5万+





