项目结构 项目头文件的代码或截图 头文件代码

#ifndef LINKSTACK_H

#define LINKSTACK_H

#include

#include

// 链式栈的节点

typedef struct LINKNODE {

struct LINKNODE* next;

}LinkNode;

// 链式栈

typedef struct LINKSTACK {

LinkNode head;

int size;

}LinkStack;

// 初始化函数

LinkStack* Init_LinkStack();

// 入栈

void Push_LinkStack(LinkStack* stack, LinkNode* data);

// 出栈

void Pop_LinkStack(LinkStack* stack);

// 返回栈顶元素

LinkNode* TopLinkStack(LinkStack* stack);

// 返回栈元素的个数

int Size_LinkStack(LinkStack* stack);

// 清空栈

void Clear_LinkStack(LinkStack* stack);

// 销毁栈

void FreeSpace_LinkStack(LinkStack* stack);

#endif

项目cpp文件代码与截图 项目的代码

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

#include "QueueStorage.h"

// 初始化函数

LinkStack* Init_LinkStack() {

LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));

stack->head.next = NULL;

stack->size = 0;

return stack;

};

// 入栈

void Push_LinkStack(LinkStack* stack, LinkNode* data) {

if (stack == NULL) {

return;

}

if (data == NULL) {

return;

}

// 入栈

data->next = stack->head.next;

stack->head.next = data;

stack->size++;

};

// 出栈

void Pop_LinkStack(LinkStack* stack) {

if (stack == NULL) {

return;

}

if (stack->size == 0) {

return;

}

// 第一个有效节点

LinkNode* pNext = stack->head.next;

stack->head.next = pNext->next;

stack->size--;

};

// 返回栈顶元素

LinkNode* TopLinkStack(LinkStack* stack) {

if (stack == NULL) {

return NULL;

}

if (stack->size == 0) {

return NULL;

}

// 返回栈顶元素

return stack->head.next;

};

// 返回栈元素的个数

int Size_LinkStack(LinkStack* stack) {

if (stack == NULL) {

return -1;

}

return stack->size;

};

// 清空栈

void Clear_LinkStack(LinkStack* stack) {

if (stack == NULL) {

return;

}

// 清空栈

stack->head.next = NULL;

stack->size = 0;

};

// 销毁栈

void FreeSpace_LinkStack(LinkStack* stack) {

if (stack == NULL) {

return;

}

free(stack);

};

项目主文件代码或截图 项目主文件代码

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

#include "QueueStorage.h"

// 企业链表中的栈可以定义链表的小节点

typedef struct MYCHAR {

LinkNode node;

char* pAddres;

int index;

}MyChar;

int IsLeft(char c) {

return c == '(';

}

int IsRight(char c) {

return c == ')';

}

MyChar* CreateMyChar(char* p,int index) {

MyChar* mychar = (MyChar*)malloc(sizeof(MyChar));

mychar->pAddres = p;

mychar->index = index;

return mychar;

}

void ShowError(char* str,int pos) {

printf("%s\n",str);

for (int i = 0; i < pos; i++) {

printf(" ");

}

printf("A");

}

int main()

{

// 扫描字符串如果碰到左括号直接入栈,如果碰到右括号从栈顶弹出括号,判断是不是左括号,如果是匹配成功

char* str =(char*) "1(+2+)))3(dsf)dfsf((sgdf)))";

// 创建栈容器

LinkStack* stack = Init_LinkStack();

char* p = str;

int index = 0;

// 扫描

while (*p != '\0') {

// 如果是左括号的话直接进栈

if (IsLeft(*p)) {

Push_LinkStack(stack,(LinkNode*)CreateMyChar(p,index));

}

// 如果是右括号,从栈顶弹出元素,判断是不是左括号

if (IsRight(*p)) {

if (Size_LinkStack(stack) > 0) {

MyChar* mychar = (MyChar*)TopLinkStack(stack);

if (IsLeft(*(mychar->pAddres))) {

Pop_LinkStack(stack);

free(mychar);

}

}

else {

printf("右括号没有匹配的左括号:\n");

ShowError(str, index);

break;

}

}

p++;

index++;

}

while (Size_LinkStack(stack) > 0) {

MyChar* mychar = (MyChar*)TopLinkStack(stack);

printf("左括号没有匹配的右括号:\n");

ShowError(str,mychar->index);

Pop_LinkStack(stack);

free(mychar);

}

printf("\n");

system("pause");

return 0;

}

项目的运行结果展示

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: