栈先进后出 队列 先进先出
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:
Post a Comment