数据结构【C语言】
CZF_csdn
记录自己的成长,战胜自己。
展开
-
链表面试题【数据结构】
从尾到头打印单链表删除一个无头单链表的非尾节点(不能遍历链表)单链表实现约瑟夫环(JosephCircle)逆置/反转单链表原创 2018-03-12 11:12:14 · 175 阅读 · 0 评论 -
七大排序算法详解【数据结构】
排序算法在编程中经常用到,要做到熟练掌握,不经要能理出逻辑,也要注重算法思想原创 2018-03-13 20:01:32 · 250 阅读 · 0 评论 -
顺序栈【数据结构】
栈:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。————百度百科在实际的应用中我们大多创建的为顺序栈,因为顺序栈在入栈和出栈时的时间复杂度均为O(1)。顺序栈:原创 2018-03-14 13:25:00 · 197 阅读 · 0 评论 -
栈的应用----括号匹配、逆波兰表达式【数据结构】
问题描述:有一个字符串、判断其中的括号是否匹配?问题解决:利用栈1.先将字符串逐次扫描,遇到左括号均入栈,遇到右括号与栈顶字符相比较。2.若栈为空,则说明字符串中右括号多余3.若栈不为空,且字符相匹配,栈顶元素出栈,继续检测下一字符,若不匹配,则说明括号匹配的类型不正确4.若都相匹配且栈为空,则说明字符串中括号匹配正确,若栈不为空,则说明左括号多余。#include原创 2018-03-14 13:47:55 · 175 阅读 · 0 评论 -
队列--环形队列【数据结构】
队列:1.只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表 2.进行插入操作的一端称为队尾(入队列) 3.进行删除操作的一端称为队头(出队列) 4.队列具有先进先出(FIFO)的特性由于顺序队列在操作上有诸多不便,(出队列时,要进行元素的搬移,效率低下,还会出现假溢出的问题)在此我们可以创建循环的顺序队列,即环形队列。环形队列的实现:原创 2018-03-14 14:13:47 · 662 阅读 · 0 评论 -
队列---链式队列【数据结构】
链式队列:即是满足队列特性的单链表链式队列的基本操作:构成:typedef struct Node{ QDataType _data; struct Node* _pNext;}Node, *PNode;typedef struct Queue{ PNode _pHead; PNode _pTail;}Queue;创建新节点:PNode BuyNode原创 2018-03-14 14:30:15 · 156 阅读 · 0 评论 -
树及二叉树基本概念【数据结构】
二叉树的基本概念原创 2018-03-24 11:36:18 · 328 阅读 · 0 评论 -
二叉树面试题及操作【完整代码】
辅助数据结构:Stack.h#pragma once //#include "BinTree.h"//typedef pBTNode SDataType;extern struct BinTreeNode;typedef struct BinTreeNode* SDataType;#define MAX_SIZE 100typedef struct Stack{原创 2018-04-04 20:25:13 · 145 阅读 · 0 评论 -
二叉树构建和基本操作【数据结构】
二叉树的基本概念介绍可以移步:点击打开链接最终完整代码详见:点击打开链接二叉树的创建:先序遍历的应用二叉树结点的结构:typedef char BTDataType;typedef struct BinTreeNode{ struct BinTreeNode* _pLeft; struct BinTreeNode* _pRight; BTDataType _data;原创 2018-04-04 20:26:52 · 395 阅读 · 0 评论 -
链表-顺序表【数据结构】
链表时数据结构学习的起点、顺序表是单链表的简单形式原创 2018-03-02 08:11:58 · 133 阅读 · 0 评论 -
哈希表--开散列【数据结构】
哈希表:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。———— 百度百科哈希冲突:对于两个数据元素的关键字Ki和Kj(i != j),有Ki != Kj,但有: HashFun(Ki) == HashFun(...原创 2018-03-06 14:28:56 · 367 阅读 · 0 评论 -
二叉搜索树【数据结构】
二叉搜索树(Binary Search Tree):(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。————百度百科二叉搜索树的基本操作:构成:既然原创 2018-03-05 12:42:08 · 139 阅读 · 0 评论 -
带头结点的双向链表【数据结构】
带头结点的双向链表是链表的进阶形式,但是使用起来也是非常方便的,基础操作需理解原创 2018-03-12 16:33:52 · 1433 阅读 · 0 评论 -
实现一个栈,Push、Pop、Min的时间复杂度为O(1)【数据结构】
1>将最小值和当前元素封装成结构体MinStack.htypedef int ElemType;typedef struct Elem{ ElemType _data; ElemType _mindata;}Elem;void InitMinStack(MinStack* s);void MinStackPush(MinStack* s, ElemType data);vo原创 2018-03-18 21:23:35 · 466 阅读 · 0 评论 -
队列和栈面试题【数据结构】
1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)。2.使用两个栈实现一个队列3.使用两个队列实现一个栈4.元素出栈、入栈顺序的合法性。原创 2018-03-18 21:12:51 · 253 阅读 · 0 评论 -
使用两个队列实现一个栈【数据结构】
使用两个队列实现一个栈StackByQueue.htypedef int SQDataType;typedef struct StackByQueue{ Queue q1; Queue q2;}StackByQueue;void InitStackByQueue(StackByQueue* s);void PushStackByQueue(StackByQueue* s,原创 2018-03-18 21:32:11 · 217 阅读 · 0 评论 -
元素出栈、入栈顺序的合法性【数据结构】
元素出栈、入栈顺序的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)。Test.cint TestStackInAndOutValid(int* In, int InSize, int* Out, int OutSize){ Stack s; int InIndex = 0; int OutIndex = 0; //入栈次序的大小和出栈的不相等 ,返回原创 2018-03-18 21:35:48 · 381 阅读 · 0 评论 -
使用两个栈实现一个队列【数据结构】
使用两个栈实现一个队列QueueByStack.htypedef int SQDataType;typedef struct QueueByStack{ Stack _s1; Stack _s2;}QueueByStack;void InitQueueByStack(Queu原创 2018-03-18 21:27:13 · 197 阅读 · 0 评论 -
堆 【数据结构】
注意堆在解决海量数据TopK方面的应用!原创 2018-03-05 17:29:01 · 117 阅读 · 0 评论 -
链表【数据结构】
链表:一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素,称存储单元为一个节点链表分为:单链表双链表双向循环链表链表与顺序表的比较:顺序表支持随机访问,单链表不支持随机访问顺序表插入/删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入/删除效率更高,时间复杂度为O(1)顺序表的高速缓存效率更高,单链表CPU高速缓存效率低这里介绍单链表的基本操作:结构:typedef ...原创 2018-03-10 00:30:01 · 134 阅读 · 0 评论