栈和队列(数据结构)

1、若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B),并写出入栈顺序。

A.3,2,6,1,4,5 B.3,4,2,1,6,5

C.1,2,5,3,4,6 D.5,6,4,2,3,1

2、已知顺序栈定义如下,请将元素d入栈的代码补充完整

定义栈的数据类型*/

 typedef struct{

    int *base;//栈底指针

    int *top;//栈顶指针  

int stack_size;//栈的大小

}SqStack; 

/*功能:将元素d入栈返回值:1:成功  0:失败*/ 

int push(       SqStack *S           ,int d)

{  //判断栈是否已满,如果满,入栈失败 

if(     S->top-S->base         >=s->stack_size) 

{   printf("栈已满,入栈失败!\n"); 

  return 0; 

 } 

//把d放入top指针所指的位置

*(    S->top     )=d; 

 //top指针上移(++)

   S->top++      ; 

 return      1         ; 

}

3、循环队列的优点是什么? 请列出并说明哪些方法可以判别它的空和满?

循环队列的优点时可以有效的利用存储空间,避免出现假溢出的现象。

当头尾指针相等时,即rear==front的时候循环队列为空

当队尾指针增1后取模运算的值与对头指针相等时,即(rear+1)%maxsize==front时循环队列满

4、设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢?

当设头指针时,出队操作为1,入队操作为n

当设尾指针时,出队操作为1,入队操作为1

5、

已知顺序队列定义如下,请将下列代码补充完整: 

typedef struct{ 

    int queue[MAX_QUEUE_SIZE];

int front;//队头

     int rear;//队尾

 }SqQueue;

/*功能:出队(把队首元素删除)参数:sq指向一个顺序队列,d:保存删除元素 返回值:1:成功  0:失败*/

int DeQueue(SqQueue *sq,int *d)

{//如果sq为NULL,输出 “队列未创建,出队失败”,返回0

  if( Sq==NULL )

{

printf(“队列未创建,出队失败!\n”) ;

return 0 ;

}

//如果队列为空:输出:队列为空,出队失败!,返回0

 If(sq->front == sq->rear)

{

printf(“队列为空,出队失败!\n”) ;

return 0 ;

}

*d= sq->queue[sq->front] ;//否则,把front所指的元素存入d

sq->front= (sq->front+1)%MAX_QUEUE_SIZE ; //front+1

return 1;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值