第十四周一周总结
来源:互联网 发布:淘宝公益宝贝产品好吗 编辑:程序博客网 时间:2024/05/18 22:51
这周我主要对栈方面的内容进行了学习,栈其实是一个只能在末端删除和插入的表,它的特点就是后进先出(或者叫先进后出)。栈可以用链表来实现,也可以用数组来实现,数组实现栈会比链表实现更简单一些,并且运算的速度也会快很多,唯一的弊端就是它需要提前声明一个数组的大小,但大多数时候这不会造成太大的影响,所以我主要对数组实现栈进行了学习。
在进行栈操作前,我们先要建立一个结构体,包括一个数组和一个头位置的数,即
typedef struct stack{ int *array; //或是其他数据类型 int num;}*Stack;
然后我们要创建一个栈,就是这样:
Stack create(int max){ Stack s = (Stack)malloc(sizeof(struct stack)); s->array = (char*)malloc(sizeof(char)*max); s->num = -1; return s;}
将一个数据进栈:
void push(char x, Stack s){ s->num++; s->array[s->num] = x;}
返回栈顶:
char top(Stack s){ return s->array[s->num];}
数据出栈:
void pop(Stack s){ s->num--;}
判断栈是否为空:
bool isempty(Stack s){ return s->num == -1;}
ps:这只是对数组实现栈进行了简单的操作,并没有对栈满等情况进行讨论。
然后我还解决了一个字符平衡的问题,就是输入大中小括号,判断它们是否正确对应,例如:{[()]}是对应的,[(])是不对应的。
实现的方法就是将遇到的左括号都推入栈中,遇到右括号就将看其是否和栈顶元素对应,如果对应就将栈顶元素弹出,不对应就将这个括号放入栈中并报错,最后如果将所有栈元素都弹出,则说明所有括号都对应。
具体的实现代码如下:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>typedef struct stack *Stack;Stack create(int max);char top(Stack s);void pop(Stack s);struct stack{ char *array; int num;};Stack create(int max){ Stack s = (Stack)malloc(sizeof(struct stack)); s->array = (char*)malloc(sizeof(char)*max); s->num = -1; return s;}char top(Stack s){ return s->array[s->num];}void pop(Stack s){ s->num--;}void push(char x, Stack s){ s->num++; s->array[s->num] = x;}bool isempty(Stack s){ return s->num == -1;}void dispose(Stack s){ free(s->array); free(s->num);}int main(void){ char str[100]; int i; gets(str); int len = strlen(str); Stack p = create(len); for(i = 0; i <= len - 1; i++){ if(str[i] == '(' || str[i] == '[' || str[i] == '{'){ push(str[i],p); } if( str[i] == ')'){ if(top(p) == '(') pop(p); else{ push(str[i],p); break; } } else if( str[i] == ']'){ if(top(p) == '[') pop(p); else{ push(str[i],p); break; } } else if( str[i] == '}'){ if(top(p) == '{') pop(p); else{ push(str[i],p); break; } } } if(isempty(p)) printf("balance"); else printf("unbalance"); dispose(p); return 0;}
阅读全文
0 0
- 第十四周一周总结
- 第十四周总结
- 第十四周总结
- 第十四周周四总结
- 第十四周周末总结
- 【考研】第十四周总结
- 【考研】第十四周总结
- 第十一周总结
- 第十一周总结
- 第十一周总结
- 第十一周周四总结
- 【考研】第十一周总结
- 第十一周周末总结+反思
- 第十四周 OJ总结<1>--数组逆序
- leetcode第十四周解题总结--二分查找
- 第十四周训练总结(一)
- 第十四周训练总结(二)
- 第十一周 OJ总结<1>-查闰年
- C++17--<转载,若有侵权,立即删除>
- 广东工业大学2017新生赛(决赛)-网络同步赛 1005 Joefery大佬的考核【简单几何】
- jdk1.8中ConcurrentHashMap的实现原理
- java.lang.IllegalStateException commit already called
- Java终止线程池的原理
- 第十四周一周总结
- AES加密解密
- Java笔记-反射机制(三)-小demo
- 洛谷1004
- 小鑫数数儿
- 内核转储-coredump简介
- python-如何退出程序
- IO基础知识
- Installation failed with message Invalid File: