基础数据结构练习(栈)

一、图书整理

  • 算法题目

图书整理

  • 题目简介

题目:图书整理

  • 涉及知识点

链表,栈

  • 算法分析
  1. 创建栈,将链表元素依次传给栈
  2. 创建数组,将栈顶元素依次弹出放入数组
  3. 返回数组
  • 源码分析
int* reverseBookList(struct ListNode* head, int* returnSize) {
   int* stack = (int*)malloc(sizeof(int) * 10000);
   int top = 0;
   //链表元素赋给栈
   while(head)
   {
       stack[top++] = head->val;
       head = head->next;
   }
    //从栈顶依次弹出元素
    int* ret = (int*)malloc(sizeof(int) * 10000);
    *returnSize = 0;
    //卡点,误认为top是在这个循环结束后才--的。只要top被调用一次,就--
    while(top--)
    {
        ret[(*returnSize)++] = stack[top];
    }

    free(stack);
    return ret;
}

此题思路与回文链表相同

二 、括号的最大嵌套深度

  • 算法题目

括号的最大嵌套深度

  • 题目简介

题目:括号的最大嵌套深度

  • 涉及知识点

栈,字符串数组元素遍历

  • 算法分析
  1. 创建一个栈(类似的机制即可)
  2. 碰到左括号进栈,再判断是否是最大嵌套深度
  3. 碰到右括号就出栈,直到字符串结束
  • 源码分析
//有几个左括号就有几个右括号
int maxDepth(char* s) {
    int top = 0;
    int i;
    int ret = 0;
    for(i=0;s[i]!='\0';i++)
    {
        if(s[i] == '(')
        {    top++;//进栈
            if(top > ret)
                ret = top;
        }
        else if(s[i] == ')')
        {
            top--;//出栈
        }
    }
    return ret;
}

这里top的++和–就相当于进出栈了,并不用重新创建一个栈

  • FAQ

容易将问题复杂化,扩展思路,可以根据情景用这种方法模拟进出栈效果

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基础数据结构是Java编程中非常重要的一部分,练习题可以帮助我们巩固对这些数据结构的理解和使用。下面是一些常见的Java基础数据结构练习题: 1. 数组反转:编写一个方法,将给定的数组按照逆序进行排列。 2. 查找元素:编写一个方法,在给定的有序整数数组中查找指定元素,返回其索引;如果不存在,则返回-1。 3. 字符串反转:编写一个方法,将给定的字符串按照逆序进行排列。 4. 链表逆序:编写一个方法,将给定的单链表进行逆序排列。 5. 的应用:使用来检查给定的括号序列是否合法,例如{[()]}是合法的,而{[(])}是非法的。 6. 队列的应用:使用队列来实现热土豆游戏,每经过指定的时间,队列中的土豆将被传递给下一个人,最后队列中剩下的人即为胜者。 7. 哈希表应用:实现一个电话号码簿,可以添加、删除和查找联系人信息。 8. 树的遍历:实现二叉树的前序、中序和后序遍历算法。 9. 图的最短路径:使用Dijkstra算法求解给定图中两个节点的最短路径。 10. 排序算法:实现常见的排序算法,如冒泡排序、插入排序和快速排序。 通过这些练习题的学习和实践,我们可以巩固对基础数据结构的理解和运用,提高自己的编程能力。同时,这些题目也是我们面试和应聘工作中常见的考察点,掌握这些知识也有助于我们在求职过程中脱颖而出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值