数据结构——栈知识整理

1.若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1(F)

解析:如果你想要找出输出序列中的第 j 个元素,不能简单地通过 j-i-1 来得到。实际上,我们需要从输入序列的末尾开始,反向查找第 j 个元素。这是因为栈的输出序列是输入序列的反向序列的前 j 个元素。对于输出序列的第 j 个元素,其值是 N - j + 1,而不是 j-i-1。这里的 i 在这个上下文中没有特定的意义,除非它指的是输出序列的第一个元素,那么 i 就应该是 N。

2.栈底元素是不能删除的元素(F)

解析:栈底元素为栈内最底下的元素,并非不能删除,而是最后删除的元素,当栈底和栈顶相等时,栈底元素即可出栈

3.顺序栈中元素值的大小是有序的。(F)

解析:顺序栈中的元素大小不一定是有序的,顺序栈是指用一组地址连续的存储单元依次存储栈中元素的数据结构,它按照栈的先进后出(FILO)原则进行操作。顺序栈的主要特点是元素在内存中按照顺序排列,但是这种排列并不涉及元素值的大小顺序,即顺序栈中元素的输入和输出顺序时有序的,但与元素大小无关

4.栈顶元素和栈底元素有可能是冋一个元素。

5.若用data[1..m]表示顺序栈的存储空间,则对栈的进栈、出栈操作最多只能进行m次。(F)

解析:栈对出栈和进栈的操作次数并无限制,只是当栈满时,元素则不可再进栈,而栈空时,元素不可再出栈,但如果栈内并未达到栈空或栈满,则对进栈出栈无次数限制

6.(neuDS)在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是top==0,当储存到第Maxsize时,其位置为Maxsize-1,而top指向栈顶元素的下一个储存空间,即位置为Maxsize,所以当栈空时,top指向0的位置

7.在一个数组里面实现两个堆栈

解题代码如下:

Stack CreateStack(int MaxSize)
{
    struct SNode *S=NULL;
    S=(struct SNode*)malloc(sizeof(struct SNode));
    S->MaxSize=MaxSize;
    S->Data=(int*)malloc(sizeof(int)*MaxSize);
    S->Top1=-1;
    S->Top2=MaxSize;
    return S;
}
bool Push(Stack S,ElementType X,int Tag)
{
    if(S->Top1==S->Top2-1)
    {
        printf("Stack Full\n");
        return false;
    }
    else
    {
        if(Tag==1)
        {
            S->Data[++(S->Top1)]=X;
        }else if(Tag==2){
            S->Data[--(S->Top2)]=X;
        }
        return true;
    }
}
ElementType Pop(Stack S,int Tag)
{
    if(Tag==1)
    {
        if(S->Top1==-1)
        {
            printf("Stack %d Empty\n",Tag);
            return ERROR;
        }else{
            return S->Data[(S->Top1)--];
        }
    }else if(Tag==2){
        if(S->Top2==S->MaxSize)
        {
            printf("Stack %d Empty\n",Tag);
            return ERROR;
        }else{
            return S->Data[(S->Top2)++];
        }
    }
    
}

本题主要注意代码编写时与题目要求的输出形式是否相同,不同即会格式错误,我在修改代码时,因为没有加\n,导致代码一直无法正确执行,写题时要注意代码的输入形式和输出形式!!!

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值