
C++ 数据结构
xuanyin235
稳住,我们能赢!!!
展开
-
数据结构一一线性表的顺序存储结构之插入操作
线性表的顺序存储的结构体定义为: #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */ typedef struct { ElemType data[MAXSIZE]; /* 数组,存储数据元素 */ int length; /* 线性原创 2017-12-25 10:27:34 · 3401 阅读 · 0 评论 -
数据结构一一归并排序
转自参考:http://blog.youkuaiyun.com/hguisu/article/details/7776068/ 归并排序基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 合并方法: 设r[i…n]由两个有序子表r[i…m]和r转载 2018-01-29 16:19:06 · 180 阅读 · 0 评论 -
数据结构一一堆排序
堆排序:一种树形选择排序,是对直接选择排序的有效改进。 综上描述,它的实现需要解决两个问题: 1、如何由一个无序序列构建成一个堆? 2、如何在输出堆顶元素后,调整剩余元素成为一个新的堆? 无序序列构建成一个堆的代码如下: /** * 初始堆进行调整 * 将L->iElem[0..length-1]建成堆 * 调整完之后第一个元素是序列的最小的元素 */ voi原创 2018-01-29 11:51:21 · 300 阅读 · 0 评论 -
数据结构一一直接插入排序
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表 如下是插入排序算法的基本实现 void InsertSort_Up(SqList* L) //升序 { int i = 0,j = 0,temp = 0; for (i=1;iiLength;i++)//循环从第二个元素开始 { if (L->iElem[i] iElem[i-1]原创 2018-01-10 16:31:56 · 267 阅读 · 0 评论 -
数据结构一一冒泡排序
冒泡排序,一种交换排序,它的基本思想是:两两比较关键字,如果反序则交换,直到没有反序的记录为止。 (1).最简单的排序实现 //让每一个关键字,都和它后面的每个关键字比较,如果大则交换,这样第一位置的关键字在一次循环后一定变成最小值。 void BubbleSort0(SqList* L) { for (int i=0;iiLength;i++) { for (int j=i+1;原创 2018-01-09 15:30:24 · 234 阅读 · 0 评论 -
数据结构一一简单选择排序
简单选择排序,基本思想:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。 //算法思想:从i(0<=i<n)次比较中,元素i赋值为最小索引与i之后的元素进行 void SelectSort(SqList* L) { int min_index = 0; for (int i=0;iiLength;i++) { min_index原创 2018-01-09 21:20:16 · 864 阅读 · 0 评论 -
数据结构一一希尔排序
基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 我们先来看一下算法(大话数据结构一书中如上节所述,存在一些小问题,我们稍作修改即可) void ShellSort0(SqList* L) { int i = 0,j = 0,temp = 0; int incre原创 2018-01-15 14:24:45 · 239 阅读 · 0 评论 -
数据结构一一线性表的链式存储结构之整表删除
单链表整表删除的算法思路如下: 声明一结点p和q;将第一个结点賦值给p;循环: 将下一结点赋值给q;释放p;将q赋值给p。 /* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */ Status ClearList(LinkList *L) { LinkList p,q; p=(*L)->next; /* p指向第一个结点 */ while(原创 2017-12-25 21:42:30 · 417 阅读 · 1 评论 -
数据结构一一线性表的链式存储结构之头插法和尾插法建立链表
单链表整表创建的算法思路: 声明一结点p和计数器变量i;初始化一空链表L;让L的头结点的指针指向NULL,即建立一个带头结点的单链表;循环: 生成一新结点賦值给p;随机生成一数字賦值给P的数据域p->data;将p插入到头结点与前一新结点之间。 头插法创建链表的函数: /* 随机产生n个元素的值,建立带表头结点的单链线性表L(头插法) */ void CreateLi原创 2017-12-25 21:33:13 · 1964 阅读 · 0 评论 -
数据结构一一线性表的链式存储结构之查找操作
一、查找指定位置的元素 声明一个结点p指向链表第一个结点,初始化j从1开始;当j 若到链表末尾P为空,则说明第i个元素不存在;否则査找成功,返回结点p的数据。 所以函数设计如下: /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */ /* 操作结果:用e返回L中第i个数据元素的值 */ Status GetElem(LinkList L,int i,E原创 2017-12-25 20:56:05 · 1653 阅读 · 0 评论 -
数据结构一一线性表的链式存储结构之删除操作
单链表删除第i个数据结点的算法思路: 声明一结点p指向链表第一个结点,初始化j从1开始;当j 若到链表末尾p为空,则说明第i个元素不存在;否则査找成功,将欲删除的结点p->next賦值给q;单链表的删除标准语句p->next=q->next;将q结点中的数据赋值给e,作为返回;释放q结点;返回成功。 #include #include #include #include #def原创 2017-12-25 18:23:17 · 2962 阅读 · 0 评论 -
数据结构一一线性表的链式存储结构之插入与遍历
单链表第i个数据插入结点的算法思路: 声明一结点p指向链表第一个结点,初始化j从1开始;当j 若到链表末尾p为空,则说明第i个元素不存在;否则査找成功,在系统中生成一个空结点s;将数据元素e賦值给s->data;单链表的插入标准语句s->next=p->next; p->next=s;返回成功。 #include #include #include #include #defin原创 2017-12-25 18:02:57 · 1184 阅读 · 0 评论 -
数据结构一一线性表的顺序存储结构之删除操作
删除算法的思路: 如果删除位置不合理,抛出异常;取出删除元素;从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;表长减1。 int ListDelete(SqList* L,int i,ElemType* e) { int k = 0; if (L->iLength == 0) { return ERROR; } if(iL->iLength) {原创 2017-12-25 15:09:22 · 1488 阅读 · 0 评论 -
数据结构一一线性表的顺序存储结构之查找操作
1.根据位置查找对应元素 int GetElem(SqList L,int i,ElemType* e) { if (L.iLength==0 || iL.iLength) { return ERROR; } *e = L.iData[i-1]; return OK; } 2.根据元素查找对应位置 int LocateElem(SqList L,ElemType e) { i原创 2017-12-25 10:53:27 · 1294 阅读 · 0 评论 -
数据结构一一快速排序
快速排序:冒泡排序的升级版 基本思想: 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素原创 2018-01-29 20:20:52 · 213 阅读 · 0 评论