运用单链表实现链栈,并实现括号匹配---作业

来源:互联网 发布:nginx 限制域名 编辑:程序博客网 时间:2024/06/10 20:19
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{int data;struct Node* pNext;}NODE,*PNODE;typedef struct Stack{PNODE pTop;PNODE pBottom;}STACK,*PSTACK;void init(PSTACK);void push(PSTACK pS,int val);void traverse(PSTACK pS);bool pop(PSTACK pS,int *pVal);bool empty(PSTACK);void clear(PSTACK pS);int getLength(PSTACK pS);int main(void){STACK s;init(&s);char ch[100],*p;int e;p = ch;printf("输入一个含有()[]{}的括号表达式:\n");gets(ch);while(*p){switch(*p){case '{':case '[':case '(':push(&s,*p++);//左括号就入栈break;case '}':case ']':case ')':pop(&s,&e);//右括号出栈if((e=='{'&& *p=='}')||(e=='['&&*p==']')||(e=='('&&*p==')'))p++;else{printf("括号不匹配!\n");exit(-1);}break;default://其他字符就后移p++;}}if(empty(&s))printf("括号匹配成功");elseprintf("缺少右括号");//push(&s,1);//push(&s,2);//traverse(&s);//printf("%d",getLength(&S));return 0;}void init(PSTACK pS){pS->pTop = (PNODE)malloc(sizeof(NODE));if(NULL == pS->pTop){printf("动态内存分配失败\n");exit(-1);}else{pS->pBottom = pS->pTop;pS->pTop->pNext = NULL;}}int getLength(PSTACK pS){PNODE p = pS->pTop;int count = 0;while(p!=pS->pBottom){count++;p = p->pNext;}return count;}void push(PSTACK pS,int val){PNODE pNew = (PNODE)malloc(sizeof(NODE));pNew->data = val;pNew->pNext = pS->pTop;pS->pTop = pNew;}void traverse(PSTACK pS){PNODE p = pS->pTop;if(p == NULL){printf("错误\n");exit(-1);}while(p->pNext!=NULL){printf("%d",p->data);p = p->pNext;}printf("\n");}bool empty(PSTACK pS){if(pS->pTop == pS->pBottom)return true;elsereturn false;}bool pop(PSTACK pS,int *pVal){if(empty(pS)){return false;}else{PNODE r = pS->pTop;*pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;return true;}}void clear(PSTACK pS){if(empty(pS)){return;}else{PNODE p = pS->pTop;PNODE q = NULL;while(p!= pS->pBottom){q = p->pNext;free(p);p = q;}pS->pTop = pS->pBottom;}}

0 0
原创粉丝点击