| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖, 1 人收藏
标题:数据结构习题——第三章 栈和队列
只看楼主 加入收藏
晓婷长月
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2013-6-4
收藏(1)
 问题点数:0 回复次数:1 
数据结构习题——第三章 栈和队列
数据结构习题——第三章 栈和队列
第三章 栈和队列
一、选择题
1.已知栈的最大容量为4。若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )
A.5,4,3,2,1,6    B.2,3,5,6,1,4
C.3,2,5,4,1,6    D.1,4,6,5,2,3
2.在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( )
A.top不变          B.top=0          C.top--        D.top++
3.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为( )
A.rear%n= = front          B.(front+l)%n= = rear
C.rear%n -1= = front      D.(rear+l)%n= = front
4.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队空的条件为( )
A.rear%n= = front          B.front+l= rear
C.rear= = front             D.(rear+l)%n= front
5.在一个链队列中,假定front和rear分别为队首和队尾指针,则删除一个结点的操作为( )
A.front=front->next     B.rear=rear->next
C.rear=front->next      D.front=rear->next
6.某堆栈的输入序列为1,2,3,…,n,输出序列的第一个元素是n,则第i个输出元素为( )
A.i     B.n-i     C.n-i+1   D.哪个元素无所谓
7.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(     )。
A.仅修改队头指针          B. 仅修改队尾指针
C. 队头、队尾指针都要修改  D. 队头,队尾指针都可能要修改
二、解答题
1.一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。 试为此双向栈设计初始化InitStack ( S ) 、入栈Push( S , i , x) 和出栈Pop( S , i )等算法, 其中i为0 或1, 用以表示栈号。
2.利用两个栈S1、S2模拟一个队列时,如何使用栈的运输实现队列的插入、删除运算。









参 考 答 案
第三章 栈和队列
一、选择题
1.C
2.C
3.D
4.C
5.A
6.C
7.D
二、解答题
1.
#define M 20
struct DStack{
    Selemtype data[M];
    int top1,top2;
};
void InitStack(DStack &s)
{
    s.top1=0;
    s.top2=M-1;
}
int IsEmpty(DStack s,int i)
{
    switch(i)
    {
    case 0:return s.top1==0;
    case 1:return s.top2==M-1;
    }
}
int IsFull(DStack s)
{
    return s.top1>s.top2;
}
void Push(DStack &s ,int i,Selemtype x)
{
    if (IsFull(s))
        {
            cout<<"full"<<endl;
            return;
        }
    switch(i)
    {
    case 0:
        s.data[s.top1]=x;
        s.top1++;
        break;
    case 1:
        s.data[s.top2]=x;
        s.top2--;
        break;
    }
    return;
}
Selemtype Pop(DStack &s,int i)
{
    Selemtype e;
    if(IsEmpty(s,i))
    {
        cout<<"Empty"<<endl;
        exit(-1);
    }
    switch(i)
    {
    case 0:
        s.top1--;
        e=s.data[s.top1];
        break;
    case 1:
        s.top2++;
        e=s.data[s.top2];
    }
    return e;
}
2.
#define M 3
struct Stack{
    Qelemtype data[M];
    int top;
};
struct Queue{
    Stack s1;
    Stack s2;
};
void InitQueue(Queue &Q)
{
    Q.s1.top=0;
    Q.s2.top=0;
}
int IsEmpty(Queue &Q)
{
    if(Q.s1.top==0&&Q.s2.top==0)
        return 1;
    if(Q.s2.top==0&&Q.s1.top!=0)
    {
        while(Q.s1.top!=0)
            Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];
    }
    return 0;
}

int IsFull(Queue &Q)
{
    if(Q.s1.top==M&&Q.s2.top!=0)
        return 1;
    if(Q.s1.top==M&&Q.s2.top==0)
    {
        while(Q.s1.top!=0)
            Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];
        return 0;
    }
    if(Q.s1.top!=M)
        return 0;
}

void InQueue(Queue &Q,Qelemtype e)
{
    if(IsFull(Q))
    {
        cout<<"OVERFLOW"<<endl;
        exit(-1);
    }
    Q.s1.data[Q.s1.top++]=e;
}

void DeQueue(Queue &Q,Qelemtype &e)
{
    if(IsEmpty(Q))
    {
        cout<<"UNDERFLOW"<<endl;
        exit(-1);
    }
    e=Q.s2.data[--Q.s2.top];
}


搜索更多相关主题的帖子: 选择题 
2013-06-16 02:39
晓婷长月
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2013-6-4
收藏
得分:0 
2013-06-16 02:39
快速回复:数据结构习题——第三章 栈和队列
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.112705 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved