数据结构
leotoneo
ls all | grep only
https://github.com/leotoneo
展开
-
线性表的实现(四)双向链表
1、基本概念单链表的结点都只有一个指向下一个结点的指针单链表的数据元素无法直接访问其前驱元素逆序访问单链表中的元素是极其耗时的操作!双向链表的定义在单链表的结点中增加一个指向其前驱的pre指针2、设计与实现插入操作删除操作双向链表的新操作获取当前游标指向的数据元素将游标重置指向链表中的第一个数据原创 2015-11-03 15:38:11 · 261 阅读 · 0 评论 -
线性表的实现(一)顺序存储结构
1、基本概念2、设计与实现接口文件:#ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);int SeqList_Cr原创 2015-11-02 12:58:07 · 426 阅读 · 0 评论 -
线性表的实现(二)链式存储
1、基本概念链式存储定义为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。表头结点链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息数据结点链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息尾结点链表中的最后一个数据结点,其下一元素指针为空,表原创 2015-11-02 13:05:29 · 337 阅读 · 0 评论 -
数据结构-各类排序算法总结(三)
各类排序算法总结五.分配类排序->基数排序:基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成“多关键码”进行排序的方法。基数排序属于”低位优先”排序法,通过反复进行分配与收集操作完成排序.对于数字型或字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字,此时可以采用这种“分配-收集”的办法进行排序,称作基数排序法。其好处是不需要进行关键字间的比较转载 2015-10-14 10:30:21 · 497 阅读 · 0 评论 -
数据结构基础(4) --快速排序
快速排序是最流行的,也是速度最快的排序算法(C++ STL 的sort函数就是实现的快速排序); 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数转载 2015-10-14 10:38:16 · 410 阅读 · 0 评论 -
数据结构基础(1) --Swap & Bubble-Sort & Select-Sort
Swap的简单实现[cpp] view plaincopy//C语言方式(by-pointer): template typename Type> bool swapByPointer(Type *pointer1, Type *pointer2) { //确保两个指针不会指向同一个对象 if (poin转载 2015-10-14 10:31:30 · 320 阅读 · 0 评论 -
数据结构-各类排序算法总结(一)
各类排序算法总结一. 排序的基本概念排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列。有 n 个记录的序列{R1,R2,…,Rn},其相应关键字的序列是{K1,K2,…,Kn},相应的下标序列为1,2,…,n。通过排序,要求找出当前下标序列1,2,…, n 的一种排列p1,p2, …,pn,使得相转载 2015-10-14 10:18:06 · 388 阅读 · 0 评论 -
数据结构基础(5) --归并排序
归并排序的基本思想: 将两个或两个以上的有序子序列”归并”为一个有序序列:假定待排序表含有n个记录, 则可以看成是n个有序的子表, 每个子表长度为1, 然后两两归并, 得到[n/2]个长度为2或1的有序表,; 再量量归并, ...., 如此重复, 直到合并成为一个长度为n的有序表为止, 这种排序方法称为2-路归并排序.如图为一个2-路归并排序的一个示例:转载 2015-10-14 10:39:28 · 345 阅读 · 0 评论 -
单向链表的基本操作及逆序实现
#include "stdio.h"#include "string.h"#include "stdlib.h"//自定义数据结构定义 本质 固定大小内存块的别名typedef struct Node{ int data; struct Node *next;}SLIST;//编写函数SList_Creat,建立带有头结点的单向链表。循环创建结点,//结点数据域中的数值从键原创 2015-10-14 14:37:32 · 394 阅读 · 0 评论 -
数据结构基础(3) --Permutation & 插入排序
Permutation(排列组合)排列问题:设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), (ri)Permutation(X)表示在全排列Permutation(X)的每一个排列前加上前缀ri得到的排列.R的全排列可归纳定义如下:当n=1时,Permutati转载 2015-10-14 10:37:05 · 288 阅读 · 0 评论 -
数据结构基础(2) --顺序查找 & 二分查找
顺序查找适用范围:没有进行排序的数据序列缺点:速度非常慢, 效率为O(N)[cpp] view plaincopy//实现 template typename Type> Type *sequenceSearch(Type *begin, Type *end, const Type &searchV转载 2015-10-14 10:33:16 · 284 阅读 · 0 评论 -
数据结构-各类排序算法总结(二)
各类排序算法总结三.交换类排序[接上]2.快速排序快速排序是通过比较关键码、交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分。其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码。我们将待排序列按关键码以支点记录分成两部分的过程,称为一次划分。对各部分不断划分,直到整个序列按关键码有序.如果每次划分对一个元素转载 2015-10-14 10:20:29 · 362 阅读 · 0 评论 -
栈的应用
应用1:就近匹配几乎所有的编译器都具有检测括号是否匹配的能力如何实现编译器中的符号成对检测?#includeintmain() { int a[4][4];int(*p)[4]; p = a[0]; return 0;算法思路从第一个字符开始扫描当遇见普通字符时忽略,当遇见左符号时压入栈中当遇见右符号时从栈中弹出栈顶符号,并进行匹配匹配成功:继续原创 2015-11-04 19:13:32 · 245 阅读 · 0 评论 -
栈的实现(二)链式栈
栈的链式存储设计与实现1、基本概念2、设计与实现定义文件ypedef void LinkStack;LinkStack* LinkStack_Create();void LinkStack_Destroy(LinkStack* stack);void LinkStack_Clear(LinkStack* stack);int LinkStac原创 2015-11-04 16:49:36 · 470 阅读 · 0 评论 -
单向链表指针头结点的修改
typedef int DataType; typedef struct Node { DataType data; struct Node *next; }SLNode; /*链表初始化*/ void ListInitiate(SLNode**head)/*为什么这里要把head设成指针的指针?*/ { if((*head=(SLNode原创 2015-09-16 08:47:02 · 1109 阅读 · 0 评论 -
栈的实现(一)顺序栈
Stack基本概念栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作栈顶(Top):允许操作的一端栈底(Bottom):不允许操作的一端Stack的常用操作创建栈销毁栈清空栈进栈出栈获取栈顶元素获取栈的大小栈的顺序存储设计与实现1、基本概念栈的顺序存储结构与线性表的顺序存储结构类似,内部都是用数组实现的。2原创 2015-11-04 13:38:49 · 365 阅读 · 0 评论 -
线性表的实现(三)循环链表
1、基本概念循环链表的定义:将单链表中最后一个数据元素的next指针指向第一个元素循环链表拥有单链表的所有操作创建链表销毁链表获取链表长度清空链表获取第pos个元素操作插入元素到位置pos删除位置pos处的元素新增功能:游标的定义在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素。循环链原创 2015-11-03 14:48:12 · 308 阅读 · 0 评论