- 博客(11)
- 收藏
- 关注
原创 求简单迷宫的路径
简单迷宫设置一个简单迷宫。(6*6) 定义迷宫入口。 迷宫入口要求:必须是边界。 3.开始走迷宫 a. 走当前步: 当前步入栈,将当前步标记为2 b. 判断当前栈顶元素是否是出口(是边界却不是入口),如果是就返回,若不是之星下一步。 c.取栈顶元素为当前步: d.走下一步: 假设优先顺序为上,左,右,下。 上:(横坐...
2018-08-26 21:54:38 422
原创 两个队列实现一个栈
关于两个栈实现一个队列的问题:两个栈实现一个队列 这篇博客我们讲两个队列实现一个栈。栈:后进先出 队列:先进先出 分析: 入栈: 哪一个队列有元素便入哪一个队列。 出栈: 返回栈顶元素: 栈的大小 两个队列的大小之和。 栈判空 两个队列均为空。代码实现: 设置一个栈由两个队列组成。队列为不带头结点的单链表,有两个指针,分...
2018-08-26 19:43:09 267
原创 一个数组实现两个栈(共享栈)(扩容)
一个数组实现两个栈的具体方法:一个数组实现两个栈(共享栈)但是上述方法的缺陷是数组的大小是恒定的,当数组满的时候就无法进行入栈操作。这篇博客我们将讲一下数组如何扩容? 实现方法:一个数组实现两个栈=====>>下标为0的位置为栈1的栈底,栈2的栈底在下标最大的位置上。栈1向左扩展,栈2向后扩展。若数组已满则增容。 首先定义一个共享栈的结构体:#define ...
2018-08-26 18:23:01 1500 3
原创 使用两个栈实现一个队列
题目:使用两个栈实现一个队列。 栈:后进先出。 队列:先进先出。 入队列: 直接入栈1。 出队列: 返回队列的队尾元素: 返回队列的队头元素: 队列为空: 栈1为空&&栈2为空。 队列元素个数: 栈1的元素个数+栈2的元素个数。参考代码: 设置一个队列由两个栈组成: typedef struct Queue{
2018-08-25 08:46:48 3298
原创 一个数组实现两个栈(共享栈)
题目: 一个数组实现两个栈。 方法1: 下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上。 如上图所示的数组:若栈1有一个元素 2,栈2有6个元素 1,2,3,4,5,6,下标为0的位置为 2,下标为1,3,5,7,9的位置分别为1,2,3,4,5。6无法插入但数组中还有很多剩余的空间。。可见该方法会...
2018-08-23 20:10:52 11451 1
原创 逆波兰表达式(后缀表达式)的计算
后缀表达式计算时,所有运算按照运算符出现的顺序,严格从左到右,每个操作符取前两个操作数进行运算,运算后的结果仍然作为下次的操作数。 那如果已知后缀表达式,如何求值: 举一个例子: 代码:#include<stdlib.h>#include<assert.h>#include<string.h>
2018-08-17 21:31:39 5842 3
原创 括号匹配问题(栈的应用)
栈: 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除等操作。 没有任何元素的栈称为空栈。 栈又称为 后进先出 的线性表。 括号匹配问题: 算法思路: 一个关于括号匹配的例子: 封装一个静态栈: #define Max 20#define DataType char typedef struct Stack{ DataType...
2018-08-17 18:10:34 836
原创 判断两个链表是否相交?若相交求出交点?(两个链表均带环)
关于链表相交的问题如果两个链表均不带环 判断两个不带环单链表是否相交?若相交求交点如果一个链表带环,一个链表不带环。两个链表不可能相交! 如果两个链表均带环:(有以下两种相交的情况) 如何判断链表是否带环,以及如何求环的入口点判断两个带环单链表是否相交: 分别判断两个单链表p1,p2是否带环,返回快慢指针的交点(此交点必在环内)meet1,meet2,一个指针不动,另一...
2018-08-16 19:23:55 565
原创 单链表的冒泡排序
单链表的冒泡排序 设置三个指针tail,p,cur;p和tail用于控制外循环的次数,cur用于内循环。排序开始前遍历一次单链表将tail指向尾结点的指针域,即NULL。cur和p均指向头结点。比较cur->data与cur->next->data的大小,若前者大于后者则交换;否则不交换,之后cur指针右移,继续比较cur->data与cur->next-...
2018-08-15 18:15:07 21335 8
原创 查找链表的倒数第k个结点(只能遍历一次结点),删除链表的倒数第k个结点。
查找链表的倒数第k个结点 方法:设置两个指针fast,slow 让快指针先走k步,随后两个指针一起向后移动,当快指针为空时,慢指针指向的结点即为链表的倒数第k个结点。 linklist * FindLastKNode(linklist *head,int k){ linklist *fast = head; linklist *slow = head; ...
2018-08-15 16:34:11 778
原创 复杂链表的复制(链表的每个结点,有一个next指针指向下一个结点,还有一个random指针指向这个链表中的一个随机结点或者NULL)
举一个复杂链表的例子: 首先我们需要创建一个复杂链表: 1. 要创建链表首先需要一个结构体:(结构体成员须包括数据,next指针,以及random指针)typedef struct node{ DataType data; struct node* next; struct node* random;}Clinklist;创建如上图所示的复杂链表...
2018-08-14 10:09:30 2382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人