数据结构与算法
文章平均质量分 67
奇颖润华
这个作者很懒,什么都没留下…
展开
-
单链表的基本操作的实现(建立、插入、删除、逆序)
单链表的定义typedef struct LNode //定义单链表结点类型{ int data; //数据域 struct LNode *next; //指针域}LNode,*LinkList; 头插法建立带头结点的单链表:LinkList CreateList1(LinkList &L) { int原创 2013-10-27 21:00:13 · 1369 阅读 · 0 评论 -
求单链表倒数第k个结点(没有尾指针)
注:本题为2009年全国硕士生考研真题算法基本思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点(链表的第一个结点),p指针沿链表移动;当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到最后一个结点时,q指针所指向结点为倒数第k个结点,以上过程对链表仅进行一遍扫描。int Search_k(LinkList L, int k){ LinkLis原创 2013-10-28 21:50:22 · 657 阅读 · 0 评论 -
二叉树的遍历算法(先序中序后序遍历的递归算法与非递归算法、层级遍历的递归与非递归算法)
1、由于顺序存储对空间利用率较低,因此一般二叉树都采用链式存储结构。typedef struct node { ElemType data; //数据域 struct node *lchild; //左孩子指针 struct node *rchild; //右孩子指针} BTNode; 2、二叉树遍历的递归算法:先序原创 2013-10-28 22:46:42 · 1601 阅读 · 0 评论 -
三种最简单的排序算法(直接插入排序、冒泡排序、简单选择排序)
一、直接插入排序(稳定)直接插入排序是最简单的排序方法之一,其基本思想是每次从无序表中取出一个元素,把它插入到有序表的合适位置,使有序表依然有序。直接插入排序是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置,其算法时间复杂度为O(N*N),空间复杂度为O(1)。void insertSort(int a[], int len) //本文默认排原创 2013-10-29 21:28:17 · 3600 阅读 · 2 评论 -
归并排序(基本思想以及算法实现)
1、算法思想:归并排序是简历在归并操作上的一种有效的排序算法,该算法的递归实现方式是采用分治法的一个典型的应用,它是一个稳定的排序算法,其时间复杂度为O(N*logN),空间复杂度为O(N).在介绍其具体实现之前,我们先来回忆下如何将两个有序序列合并的问题(http://blog.csdn.net/qiyingrunhua/article/details/13276833).该算法可简写成原创 2013-10-30 16:20:13 · 3754 阅读 · 0 评论 -
快速排序(基本思想以及算法实现)
1、引言快速排序(QuickSort)是对冒泡排序的一种改进,正如它的名字所标识的,它是在实践中最快的已知排序算法,它的平均时间复杂度是O(N*logN),该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环,它的最坏时间复杂度是O(N*N),但稍加努力就可以避免这种情形。像归并排序一样,快速排序也是一种分治的递归算法。快速基本思想是:通过一趟排序将排序的数据分割成独立的两部分,其中原创 2013-10-30 22:08:01 · 1835 阅读 · 0 评论 -
堆排序(基本思想以及算法实现)
1、引言简单选择排序算法是通过比较,确定最终的位置。假设未排序的元素个数为N,则遍历一趟,需要比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二次的比较是完全独立的,没有利用第一次比较的信息,因为第一次比较时也没有把比较信息保留下来。那么能否找到一种方法,可以将本趟比较信息记录下来,以供下一次求最值时使用,从而达到减少比较次数的目的呢?下面介绍的堆排序就是一种利用堆的性质来进行的选择原创 2013-10-30 15:20:32 · 5752 阅读 · 1 评论 -
关于散列(Hash)表的一些总结
1、引言我们讨论的链表和树表的查找中,记录在表中的位置跟记录的关键字之间不存在确定关系,因此,这些表中查找记录时需要进行一系列的关键字比较,查找的效率取决于比较的次数。散列表是一种根据关键字而直接访问的数据结构,也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系,这里建立映射关系的函数叫散列函数。散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为“冲突”(原创 2013-11-02 15:51:45 · 1032 阅读 · 0 评论 -
二分查找,二叉查找树(二叉排序树)的基本思想以及算法实现
一、二分查找(折半查找)在介绍二叉查找树之前,我们先来介绍一下二分查找。二分查找又称为折半查找,仅适用于有序顺序表。其基本思想是:首先将给定值K与表中中间位置的关键字比较,若相等,则查找成功,返回该元素的下标;若不等,则所查找的元素只能在中间数据以外前半部分或后半部分。然后在缩小的区间中继续进行同样的查找,如此重复直到找到为止,如果查找区间缩小到只有一个元素,其关键字仍不等于k,则查找失败。其原创 2013-11-02 16:43:38 · 4131 阅读 · 0 评论