数据结构与算法
whu_sky
每天都要有所收获才会觉得不是虚度光阴
展开
-
数据结构之链表反转
相对于数组来说,链表的操作让我总是特别不习惯,经常因为一个简单的操作自己要想半天。所以我决定把LeetCode题目里面一些经典的树的操作,链表的操作单独拎出来做。本身LeetCode里面很多也就是考的数据结构和算法的基础题。因为对于单链表来说,本身只有一个比指向后面元素的指针,比如叫cur。所以想要反转链表,首先必定要有一个指针,指向当前指针的前一个元素,比如叫pre。只要将pre赋值给cur原创 2014-04-01 13:38:54 · 826 阅读 · 0 评论 -
数据结构之链表分块
关于怎么将一个链表分成两个部分,就是用注明的快慢指针的办法,当然快慢指针还有很多的用法。利用一个快指针pfast和一个慢指针pslow,pslow每次做一次pslow->next,pfast步长为2,做pfast->next->next。利用两个指针的步长不通,当pfast或者pfast->next指向NULL,pslow指向的就是中间的位置。大家可以画几个链表分析一下,slow此时指向的节点原创 2014-04-01 14:44:26 · 1989 阅读 · 0 评论 -
数据结构之链表排序
为了使链表实现O(nlogn)的时间复杂度,我们可以使用快速排序或者堆排序。利用快速排序的思想也可以解决,我这里用的是堆排序。为此总共写了三个函数,第一个函数即为mergeSort堆排函数,利用递归的形式来写。先写递归出口,当head为NULL或者head只有一个元素是返回head。否则,利用快慢指针来将链表二分。具体快慢指针怎么二分链表可参见我的blog链表分块。2分链表以后,原来的链表原创 2014-04-01 14:16:25 · 1172 阅读 · 0 评论 -
单链表的实现
单链表数据结构为:typedef struct Lnode{ ElemType data; //该节点数据,头结点不存数据 struct Lnode *next; //指向下一节点指针 }LinkList;实现下列函数:void CreateListF(LinkList *&L,ElemType a[],int n); //头插法建表void CreateL原创 2014-11-09 13:13:01 · 1197 阅读 · 0 评论 -
双链表的实现
跟单链表有点像,主要区别就在建表,插入元素,删除元素这里。双链表数据结构为:typedef struct DNode{ ElemType data; //节点数据 struct DNode* prior; //指向前一节点指针 struct DNode* next; //指向后一节点指针 }DLinkList; 实现下列函数:void Create原创 2014-11-12 00:29:01 · 1089 阅读 · 0 评论 -
顺序表的实现
所谓数据结构,就是定义一组有关系的数据以及在这些数据上的操作,也就是ADT(抽象数据类型)。 包括三个方面; ADT List{ 数据对象: 数据关系:基本运算:} 以顺序表为例,它的顺序存储类型:typedef struct { ElemType data[MaxSize]; // ElemType存放数据类型 int length; }Sq原创 2014-10-31 12:53:25 · 1485 阅读 · 0 评论 -
有序表的实现
所谓的有序表表,顾名思意啊,有序表应该就是数据是有一定顺序排列的,准确定义为:线性表中所有元素以递增或递减方式排列,并规定有序表中不存在不存在元素值相同的元素。他是逻辑上的概念,不是物理上的。逻辑结构类型有,线性结构,树形结构,图形结构,表示每个节点之间的组织结构。物理上的结构有顺序存储结构,链式存储结构, 索引存储和哈希散列,表示逻辑上的数据结构以什么样的方式存储在存储设备上。顺序表原创 2014-11-12 12:41:47 · 3105 阅读 · 0 评论 -
顺序栈的实现
顺序栈的数据结构如下:typedef struct{ ElemType data[MaxSize]; //栈数据 int top; // }SqStack;实现下列函数:void InitStack(SqStack* &s); //初始化栈void DestroyStack(SqStack* &s); //销毁栈int S原创 2014-11-14 17:59:11 · 1106 阅读 · 0 评论 -
顺序串的实现
顺序串数据结构如下:原创 2014-11-23 22:26:17 · 1314 阅读 · 0 评论