使用栈实现的括号匹配
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 10
//定义栈的结构体
typedef struct SeqStack
{
char data[MaxSize];//静态数组存取栈中元素,销毁栈时不必手动释放空间
int top;//定义栈顶指针
}Stack,*SqStack;
//初始化栈
void InitStack(SqStack s)
{
s->top = -1;
printf("初始化成功\n");
}
//打印栈(不要改变栈顶指针,否则遍历一遍就相当于清空了整个栈)
void Print(SqStack s)
{
if(s->top <0)
printf("栈为空,无法打印\n");
else{
int n = s->top;
for(int i = 0;i < n + 1;i++)
{
printf("栈的第%d个位置上的数字是%d\n",i+1,s->data[i]);
}
}
}
//入栈
void InStack(SqStack s,int x)
{
if(s->top == MaxSize)
{
printf("栈已满,无法插入\n");
}else{
s->top++;
s->data[s->top] = x;
}
}
//出栈
void OutStack(SqStack s)
{
if(s->top == -1)
{
printf("这是空栈\n");
}else{
printf("元素%c出栈\n",s->data[s->top]);
s->top--;
}
}
//获取栈顶元素
char GetTop(SqStack s)
{
return s->data[s->top];
}
//括号匹配
//将括号存入数组,在判断是否入栈或出栈
void BracketSuit()
{
SqStack s = (SqStack)malloc(sizeof(char)*MaxSize);
if (s == NULL)
{
printf("内存分配失败\n");
}
InitStack(s);
char a[100];
printf("请输入括号\n");
scanf("%s",a);//将字符串读入数组
int length = strlen(a);
int i = 0;
for(i = 0;i < length;i++) {
if (a[i] == '[' || a[i] == '(' || a[i] == '{') {
InStack(s, a[i]);
printf("括号%c入栈\n", a[i]);
} else {
if (a[i] == ']') {
if (GetTop(s) == '[') {
OutStack(s);
printf("[]配对成功\n");
} else {
printf("]是单括号\n");
break;
}
} else if (a[i] == '}') {
if (GetTop(s) == '{') {
OutStack(s);
printf("{}配对成功\n");
} else {
printf("}是单括号\n");
break;
}
} else if (a[i] == ')') {
if (GetTop(s) == '(') {
OutStack(s);
printf("()配对成功\n");
} else {
printf(")是单括号\n");
break;
}
}
}
}
}
int main()
{
BracketSuit();
return 0;
}
使用递归算法实现数的阶乘
#include <stdio.h>
#include <stdlib.h>
int Factorial(int x)
{
if(x == 1)
return 1;
else
return x * Factorial(x-1);
}
int main()
{
int x = 0;
printf("请输入想计算的阶乘值:\n");
scanf("%d",&x);
int a = Factorial(x);
printf("值%d的阶乘值为%d\n",x,a);
return 0;
}