/*
typedef struct Stack{
ElemType *base;
ElemType *top;
int size;
}SqStack;
*/
Status Init(SqStack &s){
s.base =(ElemType*)malloc(INIT_VALUE *sizeof(ElemType));if(!s.base)return ERR;
s.top = s.base;
s.size = INIT_VALUE;return OK;}
Status GetTop(SqStack s,ElemType &e){if(s.top == s.base)return ERR;
e =*(s.top-1);return OK;}
Status Push(SqStack &s,ElemType e){if(s.top-s.base >= s.size){
s.base =(ElemType*)realloc(s.base,sizeof(ElemType)*s.size*2);// x 2if(!s.base)return ERR;
s.top = s.base + s.size;
s.size = s.size *2;}*s.top++= e;// assign then ++return OK;}
Status Pop(SqStack &s,ElemType &e){if(s.top == s.base)return ERR;
e =*--s.top;return OK;}
queue
ops
typedefstructQNode{
ElemType data;structQNode*next;}QNode,*QueuePtr;typedefstruct{
QueuePtr f;
QueuePtr r;}LinkQueue;
Status Init(LinkQueue &q){
q.f = q.r =(QueuePtr)malloc(sizeof(QNode));if(!q.f)return ERR;
q.f->next =NULL;return OK;}
Status Destory(LinkQueue &q){while(q.f){
q.r = q.f->next;free(q.f);
q.f = q.r;}return OK;}
Status Enq(LinkQueue &l,ElemType e){
p=(QueuePtr)malloc(sizeof(QNode));if(!p)return ERR;
p->data = e;
p->next =NULL;
q.r->next = p;// add to rear next
q.r = p;// q.r ptr to preturn OK:}
Status Deq(LinkQueue &q,ElemType &e){if(q.f==q.r)return ERR;
to_del = q.f->next;
e = to_del->data;
q.f->next = to_del->next;if(q.r == to_del){
q.r = to_del.f;}free(q);return OK;}
ops SqQueue
typedefstruct{
ElemType *base;int f;int r;}SqQueue;
Status Init(SqQueue &q){
q.base =(ElemType*)malloc(INIT_VALUE *sizeof(ElemType));if!q.base {return ERR;}
q.f = q.r =0;return OK:}
Status Enq(SqQueue &q,ElemType e){if(q.r +1)% INIT_VALUE == q.f {return ERR;}
q.base[q.r]= e;
q.r =(q.r +1)%INIT_VALUE;// ops on q.r when enqreturn OK;}
Status Deq(SqQueue &q,ElemType &e){if q.f == q.r {return ERR;}
e = q.base[q.f];
q.f =(q.f+1)%INIT_VALUE;// ops on q.f when deqreturn OK;}
bin tree
ops for traverse
Status PreOrder(BiTree t,Status(*visit)(ElemType e)){
Status Print_Elem(ElemType e){printf(e);return OK;}if(t){if(visit(t->data)){if(PreOrder(t->lchild, visit)){if(PreOrder(t->rchild, visit)){return OK;}}}return ERR;}elsereturn OK;}
Status Inorder_no_recur(BiTree t,Status(*visit)(ElemType e)){InitStack(s);Push(s, t);while(!StackEmpty(s)){while(GetTop(s, p)&& p){Push(s, p->lchild);}Pop(s, p);// once push to stack , make popif(!StackEmpty(s)){Pop(s, p);if(!visit(p->data)){return ERR;}Push(s, p->rchild);}}}return OK;
DFS BFS
查找
BST
BiTre SearchBST(BiTree t,target){if(!t){EQ(target,t->data.key)return t;}elseifLT(target,t->data.key)returnSearchBST(t.lchild,target);// to find the left sideelsereturnSearchBST(t.rchild,target);}
排序
quick sort
intPartition(SqList &l,int low,int high){
l.r[0]= l.r[low];
standard = l.r[low].key;// value of standardwhile(low < high){while(low < high && l.r[high].key >= standard){--high;}while(low < high && l.r[low].key <= standard){++low;}
l.r[high]= l.r[low];}
l.r[low]= l.r[0];return low;}voidQSort(SqList &l,int low,int high){if(low<high){
standard_loc =Partition(l,low,high);QSort(l,low,standard_loc -1);QSort(l,standard_loc+1,high);}}