作业7可用
This commit is contained in:
parent
9f20e81f4d
commit
f1c974dcc2
4 changed files with 127 additions and 74 deletions
68
ex7/ex7.cpp
68
ex7/ex7.cpp
|
@ -1,8 +1,68 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "stack.h"
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include "stack.hpp"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
printf("g")
|
Stack<int> stack;
|
||||||
|
int op = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
op = 0;
|
||||||
|
printf("选择操作:1入栈2出栈3深度4是否空5栈顶6退出\n");
|
||||||
|
scanf("%d", &op);
|
||||||
|
switch (op)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("输入\n");
|
||||||
|
scanf("%d", &op);
|
||||||
|
stack.push(op);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("出%d \n", stack.pop());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("深度%d \n", stack.depth());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%d \n", stack.empty());
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%d \n", stack.top());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
goto Out;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Out:
|
||||||
|
Stack<char> S;
|
||||||
|
std::string exp;
|
||||||
|
bool flag = true;
|
||||||
|
printf("输入算式\n");
|
||||||
|
std::cin >> exp;
|
||||||
|
for (int i = 0; i < sizeof(exp); i++)
|
||||||
|
{
|
||||||
|
switch (exp[i])
|
||||||
|
{
|
||||||
|
case '(':
|
||||||
|
case '[':
|
||||||
|
case '{':
|
||||||
|
S.push(exp[i]);
|
||||||
|
break;
|
||||||
|
case ')':
|
||||||
|
'(' != S.pop() ? flag = false : 0;
|
||||||
|
break;
|
||||||
|
case ']':
|
||||||
|
'[' != S.pop() ? flag = false : 0;
|
||||||
|
break;
|
||||||
|
case '}':
|
||||||
|
'}' != S.pop() ? flag = false : 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(flag==true&&S.empty()) ? printf("匹配成功\n") : printf("匹配失败\n");
|
||||||
}
|
}
|
|
@ -1,27 +0,0 @@
|
||||||
#include "stack.h"
|
|
||||||
|
|
||||||
// template <class T>
|
|
||||||
// void Stack<T>::push (T const& elem)
|
|
||||||
// {
|
|
||||||
// _elems.add(elem);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// template <class T>
|
|
||||||
// T Stack<T>::pop ()
|
|
||||||
// {
|
|
||||||
// if (_elems.getused()) {
|
|
||||||
// return NULL;
|
|
||||||
// }
|
|
||||||
// // 删除最后一个元素
|
|
||||||
// return _elems.remove_back()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// template <class T>
|
|
||||||
// T Stack<T>::top () const
|
|
||||||
// {
|
|
||||||
// if (_elems.getused()) {
|
|
||||||
// return NULL;
|
|
||||||
// }
|
|
||||||
// // 返回最后一个元素的副本
|
|
||||||
// return _elems[_elems.getused()-1];
|
|
||||||
// }
|
|
42
ex7/stack.h
42
ex7/stack.h
|
@ -1,42 +0,0 @@
|
||||||
template <class T>
|
|
||||||
class Stack {
|
|
||||||
private:
|
|
||||||
T _v[10];
|
|
||||||
int _len=10;
|
|
||||||
int used=0;
|
|
||||||
public:
|
|
||||||
void push(T const&);
|
|
||||||
T pop();
|
|
||||||
T top() const;
|
|
||||||
bool empty() const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// void expand()
|
|
||||||
// {
|
|
||||||
|
|
||||||
// _len = _len * 2;
|
|
||||||
// T *p = new T[_len];
|
|
||||||
|
|
||||||
// for (int i = 0; i <= _used; i++)
|
|
||||||
// p[i] = _v[i];
|
|
||||||
|
|
||||||
// delete[] _v;
|
|
||||||
// _v = p;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// template <class T>
|
|
||||||
// void Vec<T>::shrink()
|
|
||||||
// {
|
|
||||||
// if (((double)_used / (double)_len) >= 0.25)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// _len = _len >> 1;
|
|
||||||
// T *p = new T[_len];
|
|
||||||
|
|
||||||
// for (int i = 0; i <= _used; i++)
|
|
||||||
// p[i] = _v[i];
|
|
||||||
|
|
||||||
// delete[] _v;
|
|
||||||
// _v = p;
|
|
||||||
// }
|
|
||||||
};
|
|
62
ex7/stack.hpp
Normal file
62
ex7/stack.hpp
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#ifndef _GLIBCXX_IOSTREAM
|
||||||
|
#include <iostream>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class Stack
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
T *_v;
|
||||||
|
int _len = 10;
|
||||||
|
int _used = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Stack()
|
||||||
|
{
|
||||||
|
_v = new T[_len];
|
||||||
|
}
|
||||||
|
|
||||||
|
void push(T const &elem)
|
||||||
|
{
|
||||||
|
_v[_used++] = elem;
|
||||||
|
expand();
|
||||||
|
}
|
||||||
|
|
||||||
|
T pop() { return !_used ? NULL : _v[--_used]; }
|
||||||
|
|
||||||
|
T top() const { return !_used ? NULL : _v[_used - 1]; }
|
||||||
|
|
||||||
|
bool empty() { return _used ? false : true; }
|
||||||
|
|
||||||
|
int depth() { return _used; };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void expand()
|
||||||
|
{
|
||||||
|
if (((double)_used / (double)_len) <= 0.75)
|
||||||
|
return;
|
||||||
|
_len = _len * 2;
|
||||||
|
T *p = new T[_len];
|
||||||
|
|
||||||
|
for (int i = 0; i <= _used; i++)
|
||||||
|
p[i] = _v[i];
|
||||||
|
|
||||||
|
delete[] _v;
|
||||||
|
_v = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void shrink()
|
||||||
|
{
|
||||||
|
if (((double)_used / (double)_len) >= 0.25)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_len = _len >> 1;
|
||||||
|
T *p = new T[_len];
|
||||||
|
|
||||||
|
for (int i = 0; i <= _used; i++)
|
||||||
|
p[i] = _v[i];
|
||||||
|
|
||||||
|
delete[] _v;
|
||||||
|
_v = p;
|
||||||
|
}
|
||||||
|
};
|
Reference in a new issue