分享

数据结构000

 梦游雪山 2012-06-29

算法2.12

void MergeList_L(LinkList &LaLinklist &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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多