栈
栈是限定仅在标为进行插入或删除的线性表,表尾为栈顶,表头为栈底,不含元素的栈为空栈。
先进后厨(last in first out)
栈的表示和实现
#define max_size 100
#define later 10
typedef struct
{
int *base;
int *top;
int num;
}SqScack;
栈的应用举例
进制转换
void f(int n, int k)
{
stack<int> s;
while(n)
{
s.push(n%k);
n/=k;
}
while(!s.empty())
{
int k1 = s.top();
s.pop();
cout << k1;
}
}
括号匹配
只有(){}[]三种括号
void f(string s)
{
stack<char> q;
for(int i = 0; i < s.size(); ++i)
{
if(s[i] == '[' || s[i] == '{' || s[i] == '(')
q.push(s[i]);
else
q.pop();
}
if(!q.empty()) cout << "no" << endl;
else cout << "yes" << endl;
}
行编辑程序
#前一个字符无效,@这一行的这个字符前面都无效
whli##ilr#e(s#*s)
outcha@putchar(*s=#++);
//转换之后
while(*s)
putchar(*s++);
void nice()
{
stack<char> s;
stack<char> s1;
char ch = getchar();
while (EOF != ch)
{
while (EOF != ch && '\n' != ch)
{
switch (ch)
{
case '#':
s.pop();
break;
case '@':
while (!s.empty())
{
s.pop();
}
break;
default:
s.push(ch);
break;
}
ch = getchar();
}
while (!s.empty())
{
s1.push(s.top());
s.pop();
}
while (!s1.empty())
{
cout << s1.top();
s1.pop();
}
cout << endl;
if (ch != EOF)
ch = getchar();
}
}
队列
与栈相反,队列是先进先出(first in forsr out)的线性表;
允许插入的一端叫队尾,允许删除的一端叫队头