算法2.12 void MergeList_L(LinkList &La,Linklist &Lb, Linklist &Lc) { pa=La->next; pb=Lb->next;Lc=pc=La; While(pa&&pb){ If(pa->date<=pb->date){ pc->next=pa;pc=pa;pa=pa->next;} else{pc->next=pb;pc=pb;pb=pb->next} } pc->next=pa?pa:pb; Free(Lb); } //MergeList_L 算法2.18 Status ListInsert_Dul(DulinkList &L,int i, ElemType e) { If(!(p=GetElemp_DUL(L,i))) return ERROR; if(!(s=(DulinkList)malloc(sizeof(DuLNode)))) return ERROR; s->date=e; s->prior=p->prior;p->prior->next=s s->next=p; p->prior=s; return OK;}//LinstInsert_DuL 算法2.19 Status ListDelte_Dul(DulinkList &L, int i,ElemType &e) { if (!(p=GetElemp_Dul(L,i))) return ERROR; e=p->date; p->prior->next=p->next; p->next->prior=p->prior; free(p);return OK}//ListDelete_Dul 栈的4个基本操作 构造一个空栈 Status InitStack (SqStack &S){ S.base=(SElemType *)malloc( STACK_INIT_SIZE*sizeof(SElemType)); If(!S.base) exit (OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK}//GetTop 判空 Status GetTop(SqStack S,SElemType &e) { if(S.top==S.base) return ERROR; E=*(S.top-1); return OK; }//GetTop 进栈 Status Push (Sqstack &S,SElemType e){ if (S.top-S.base>=S.stacksize){ S.base=(SElemType*)realloc(S.base (S.stacksize+STACKINCREMENT)* Sizeof(SElemType)); if (!S.base) exit (OVERFLOW); S.top=S.base+S.stcksize; S.stacksize+=STACKINCREMENT; } *S.top++=e;return OK;}//Push 出栈 Status Pop(SqStack &S, SElemType &e) {if (S.top==S.base) return ERROR; E=*- -S.top; return OK;}//Pop 入队 Status EnQueue(LinkQueue &Q, QElemType e){ p=(QueuePtr)malloc(sizeof(QNode)); if (!p), exit(OVERFLOW); p->data=e;p->nexte=NULL; Q.rear->next=p; Q.rear=p; return OK} 出队 Status DeQueue(LinkQueue &Q, QElemType e){ if (Q.front==Q.rear) ruturn ERROR; p=Q.front->next;e=p->data; Q.front->next=p->next; if (Q.rear==p) Q.rear=Q.front; free(p); return OK;} 串的定位 算法4.5 int Index(SString S,SString T,int pos) {i=pos;j=1; while(i<=S[0]&&j<=T[0]){ if (S[i]==T[j]){++I;++j;} else {i=i-j+2;j=1;} } if (j>T[0]) ruturn i-T[0]; else return 0;}//Tndex 二叉树先序 void preorder(Bin Tree bt){ if (bt){visit(bt->data); preorder(bt->lchild); preorder(bt->rchild); } } 后序 Void visit(Bin Tree bt){ if (bt) { Inorder (bt->lchild); Inorder(bt->rchild); Visit (bt->data);}} 中序 Void Inorder(Bin Tree bt) {if (bt){inorder (bt->lchild); visit (bt->dchild); inorder(bt->rchild); }} 算法4.7 Void get_next(SString T, int next[]) {i=1; next[1=0]; j=0; While (i<T[0]){ if (j==0丨丨T[i]==T[j]) {++i; ++j; next[i]=j;} else j = next[j];}}//get_next 迷宫求解,算法4.3 typedef struct{ int ord; PosType seat; int di;}SElemType; Status Mazepath(MazeType maze, PosType start, PosType end){ InitStack(S); curpos=start; curstep=1; do{ if(Pass(curpos)){ FootPrint(curpos); e=(curstep,curpos,1); Push(S.e); if(curpos==end) return (TRUE); curpos=NextPos(curpos,1); curstep++;}//if else{ if(!StacEmpty(S)) { Pop(S,e); while(e.di==4&&!StackEmpty(S)) {MarkPrint(e.seat); Pop(S.e); }//while if(e.di<4){e.di++; Push(S.e); curpos=NextPos(e.seat e.di); }//if }//if }//else }while(!StackEmpty(S)); Return (FALSE); }//MazePath 表达式求值 OperandType EvaluateExpression( ){ InitStack(OPTR); Push(OPTR,’#’); initstck(OPND);c=getchar( ); while (c!=’#’丨丨GetTop(OPTR) !=’#’) { if (!In(c,OP)){Push((OPND),c); c=getchar( );} else switch (Precede(GetTop(OPTR),c)) {case’ <’: Push(OPTR,c); c=getchar( ); break; case’=’: Pop(OPTR,x); c=getchar( ); break; case’>’: Pop(OPTR,theta); Pop(OPND,b);Pop(OPND,a); Push(OPND,Operate(a,theta,b)); Break; }//switch }//while Return GetTop(OPND); }//EvaluateExpression |
|