Sunday, August 17, 2008

栈和队列

栈先进后出 队列 先进先出

1.顺序栈

struct stack{

datatype s[n0+1];

int t ;

}


void push(stack & L, datatype x){

if(L.t==n0){

cout<<"栈满";

else

L.s[++L.t]=x;

}

}


void pop(stack & L){

if(L.t==0)

cout<<"empty";

else

L.t--;

}

2.链接栈

struct node{

datatype data ;

node * next ;

}//t是栈顶指针

void push(node * &t,datatype x){

node * p;

p = new node ;

p->next=t;

p->data=x;

t=p;

}

void pop (node * & t){

node * p;

if(t==NULL)

cout<<"栈空";

else {

p=t;

t=t->next;

delete p;

}

}

表达式求值:

数字串转换为整数值

v=0;

do{

v = 10 * v + c-'0';

cin>>c;

}while((c>='0')&&(c<='9'))

顺序队列

队列中最多容纳n0个元素 插入新元素之前,若出现(r+1)mod(n0+1)等于f则说明队列已满,若在删除操作之前,若出现f等于r,则说明队列已空,不能删除。

队列中元素个数为n=(rear-front+n0+1)mod(n0+1)

插入:

struct queue{

datatype q[n0+1];

int f,r;

}

void enq(queue & qu,datatype x){

if((qu.r+1)%(n0+1)==qu.f)){

cout<<"已满";

}

else{

qu.q[qu.r]=x;

qu.r=(qu.r+1)%(n0+1);

}

}

删除 qu.f=(qu.f+1)%(n0+1)

No comments: