
数据结构
文章平均质量分 81
KomaCC
不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
展开
-
顺序栈和链式栈的基本操作
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定...原创 2018-05-22 13:49:57 · 621 阅读 · 0 评论 -
双向循环链表的基本操作
DLink.h#pragma once #include <stdio.h>typedef int DLinkType;typedef struct DLinkNode { DLinkType data; struct DLinkNode* _next; struct DLinkNode* _prev;} DLinkNode;DLinkNode* BuyNode(DL...原创 2018-05-15 19:37:34 · 270 阅读 · 0 评论 -
双向链表的基本操作(不循环)
什么是双向链表?双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。如图:双向链表的基本操作:头插,头删,尾插,尾删,任意位置前插入,任意位置后插入,查找节点。代码块:DLink.h#pragma once #include <stdio.h...原创 2018-05-15 18:26:38 · 521 阅读 · 0 评论 -
实现最小栈的两种O(1)算法
最小栈的操作和普通栈的操作没有太大区别,唯一多了一个方法就是getMin()方法,这个方法是用来获取当前栈内的最小值。直接上代码:第一种:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<iostream>#include<stack>using namespace std;clas...原创 2018-05-25 17:23:52 · 895 阅读 · 1 评论 -
用栈实现括号匹配问题
基本思想:先封装好一个栈,然后输入我们的括号,比如 ([{}] ,然后让我们的左括号进栈,遇见右括 号,如果栈顶元素是与其相匹配的左括号,则出栈,若不是则说明匹配失败,返回。代码分析:stack.h#define _CRT_SECURE_NO_WARNtypedef char DataType;typedef struct stack{ DataType*top;...原创 2018-04-19 16:24:46 · 734 阅读 · 0 评论 -
单链表实现约瑟夫环
何谓约瑟夫环?约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,剩下最后一个人。举个例子:按照以上规则,最后剩下的是...原创 2018-03-15 23:08:25 · 572 阅读 · 0 评论 -
无头单链表的逆置(头插法和三个指针法)
关于链表的逆置方法有许多,这里给大家讲述一下应用较为普遍的头插法和就地逆置法,解决问题的关键在于我们要学会自己画图去理解具体逆置的过程,有了思路,问题的解决自然就简单了很多。头插法:我的思路是先创建一个空结点pHead,然后让它指向NULL;然后定义三个指针变量,pCur是沿着原链表走,pPrev标记 pCur前一位依次把结点拆下来,插在pHead与pHead的next之间,循环至结束。代码:No...原创 2018-03-22 11:25:51 · 1766 阅读 · 0 评论 -
两个栈实现一个队列 / 两个队列实现一个栈(模板)
两个栈实现一个队列 #pragma once#include<stdio.h>#include<Windows.h>#include<assert.h>#include<iostream>#include<stack>using namespace std;stack<int> s1, s2;//两个栈s1和s...原创 2018-05-27 23:54:14 · 486 阅读 · 0 评论