return OK; }
Status DeQueue (SqQueue &Q, ElemType &e) { // 若队列不空,则删除Q的队头元素, // 用e返回其值,并返回OK; 否则返回ERROR if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front];
Q.front = (Q.front+1) % MAXQSIZE; return OK; }
经典算法:
1.行编辑
while (ch != EOF) { //EOF为全文结束符 while (ch != EOF && ch != '\\n') { switch (ch) {
case '#' : Pop(S, c); break;
case '@': ClearStack(S); break;// 重置S为空栈 default : Push(S, ch); break; }
ch = getchar(); // 从终端接收下一个字符
} 2.
从原表达式求得后缀式的规律为: 1) 设立操作数栈;
2) 设表达式的结束符为“#”, 予设运算符栈的栈底为“#”; 3) 若当前字符是操作数, 则直接发送给后缀式。
4) 若当前运算符的优先数高于栈顶 运算符,则进栈;
5) 否则,退出栈顶运算符发送给后 缀式;
6) “(” 对它之前后的运算符起隔离 作用,“)”可视为自相应左括弧开始 的表达式的结束符。 算法:
void transform(char suffix[ ], char exp[ ] ) { InitStack(S); Push(S, p = exp; ch = *p; while (!StackEmpty(S)) {
#);
if (!IN(ch, OP)) Pass( Suffix, ch); else { }
if ( ch!= # ) { p++; ch = *p; } else { Pop(S, ch); Pass(Suffix, ch); } } // while } // CrtExptree … … switch (ch) { case case
( : Push(S, ch); break; ) : Pop(S, c);
( )
while (c!=
{ Pass( Suffix, c); Pop(S, c) } break; defult :
while(Gettop(S, c) && ( precede(c,ch))) { Pass( Suffix, c); Pop(S, c); } if ( ch!= # ) Push( S, ch); break; } // switch 3.汉诺塔
void hanoi (int n, char x, char y, char z) {
// 将塔座x上按直径由小到大且至上而下编号为1至n
// 的n个圆盘按规则搬到塔座z上,y可用作辅助塔座。 1 if (n==1)
2 move(x, 1, z); // 将编号为1的圆盘从x移到z 3 else {
4 hanoi(n-1, x, z, y); // 将x上编号为1至n-1的 //圆盘移到y, z作辅助塔
5 move(x, n, z); // 将编号为n的圆盘从x移到z 6 hanoi(n-1, y, x, z); // 将y上编号为1至n-1的 //圆盘移到z, x作辅助塔 7 } 8 }
树:
二叉树的顺序存储:
#define MAX_TREE_SIZE 100 // 二叉树的最大结点数 typedef TElemType SqBiTree[MAX_ TREE_SIZE]; // 0号单元存储根结点 SqBiTree bt;
二叉树的二叉链表存储:
typedef struct BiTNode { // 结点结构 TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指针 } BiTNode, *BiTree;
二叉树的三叉链表存储:
typedef struct TriTNode { // 结点结构 TElemType data;
struct TriTNode *lchild, *rchild; // 左右孩子指针
struct TriTNode *parent; //双亲指针 } TriTNode, *TriTree;
二叉树的双亲链表存储:
typedef struct BPTNode { // 结点结构 TElemType data;
int *parent; // 指向双亲的指针 char LRTag; // 左、右孩子标志域 } BPTNode
树的结构:
typedef struct BPTree{ // 树结构 BPTNode nodes[MAX_TREE_SIZE]; int num_node; // 结点数目