
数据结构
马衍硕
读万卷书,行万里路。
展开
-
数据结构之单链表的原地逆置
数据结构之单链表的原地逆置: 算法思想: 从单链表的第一个结点开始,用头插法再次插入链表,此时,链表中元素的次序就是原来顺序的逆序。 代码:#include<stdio.h>#include<stdlib.h>#define ElemType int#define maxsize 20typedef struct ListNode{原创 2017-11-15 22:23:14 · 4573 阅读 · 0 评论 -
数据结构之二叉树的建立及中序遍历
#include<stdio.h>#include<stdlib.h>#define ElemType inttypedef struct BiNode{ ElemType data; struct BiNode* lchild; struct BiNode* rchild;}BiNode,*BiTree;//----------------二叉树的建立-------原创 2017-11-25 21:55:29 · 412 阅读 · 0 评论 -
数据结构之直接插入排序
数据结构之直接插入排序(升序): 算法思想: 认为线性表中第一个元素有序,从第二个元素开始,与前一个元素比较大小: (1)如果当前元素值大于前一个元素,不做任何处理; (2)如果当前元素小于前一个元素,则应当将当前元素插入到已排序的顺序表中,将当前元素A[i]复制到A[0]中,作为哨兵。在已排序顺序表中从后往前查找待排元素的插入位置。如果已排序顺序表中的元原创 2017-11-13 11:34:47 · 733 阅读 · 0 评论 -
数据结构之 将顺序表所有元素逆置,要求空间复杂度为O(1)
问题:设置一个高效的算法,将顺序表的所有的元素逆置,要求空间复杂度为O(1)。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define Maxsize 50typedef struct SqList{ int* data; int length; };// ----------原创 2017-09-30 16:43:48 · 9785 阅读 · 2 评论 -
数据结构之简单的顺序表
简单的顺序表,包含对顺序表的插入、删除、取值。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define Maxsize 50typedef struct SqList{ int* data; int length; };// --------------------------原创 2017-09-30 16:23:31 · 386 阅读 · 0 评论 -
数据结构之 删除顺序表中所有元素为X 的元素,要求时间复杂度为O(n),空间复杂度为O(1)
问题:长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。令x=100,删除顺序表中关键字为100的元素。算法思想:用K记录顺序表L,中不等于x的元素的个数,边扫描L,边统计K,并将不等于x的元素,放在k位置上,最后修改表长。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>原创 2017-09-30 17:07:41 · 9395 阅读 · 0 评论 -
数据结构之从有序的顺序表中删除所有其值重复的元素,使表中的元素均不相同
题目:从有序的顺序表中,删除所有其值相同的元素,使表中的所有元素的值均不相同。算法思想:因为是顺序表,用类似于直接插入排序的思想,将第一个元素看作非重复的有序表,之后依序判断后面的元素是否和前面非重复的有序表中的最后一个元素相同,相同则舍弃,不同则加入有序表,直至判断到表尾。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#defin原创 2017-09-30 19:49:01 · 15462 阅读 · 4 评论 -
数据结构之两个有序表的合并
问题:将两个有序顺序表合并成一个有序顺序表。算法思想:不断取两个顺序表表头,比较大小,将小者存入新的有序顺序表,直至其中一个表比较完毕,将另一个剩余的表全部存入新的顺序表。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define Maxsize 50int flag=1; //利用变量构造原创 2017-09-30 20:32:24 · 9824 阅读 · 0 评论 -
数据结构之 单链表的基本操作(创建、取值、插入、删除)
单链表的基本操作,创建、取值、插入、删除结点。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef struct LNode{ int data; struct LNode* next;}LNode, *Linklist;//-------------------头插法建立单链表------原创 2017-10-20 21:22:13 · 6551 阅读 · 0 评论 -
数据结构之共享栈
数据结构之共享栈 两个栈的栈底为一维数组的两端。 栈0的栈底为-1 栈1的栈底为n 判断栈满的条件为: 两个栈的栈顶相差1#include<stdio.h>#include<stdbool.h>#define maxsize 20#define ElemType inttypedef struct{ int st原创 2017-10-30 12:42:56 · 1002 阅读 · 0 评论 -
数据结构之循环队列
数据结构之循环链表。 压入元素: rear=(rear+1)%maxsize; 删除元素: front=(front+1)%maxsize; 判断队空: front==rear; 判断队满: front==(rear+1)%maxsize; 队中元素的个数: num=(rear-front+maxsize)%maxsize;代码:#include<stdio原创 2017-10-30 22:58:03 · 415 阅读 · 0 评论 -
数据结构之用栈模拟队列
数据结构之用栈模拟队列: 需要用两个栈,一个栈用于入队,一个栈用于出队。 入队时,将元素压入第一个栈,出队时从第二个栈中取栈顶元素。 当有元素入队时: (1)如果第一个栈不满时,直接向栈中压入元素; (2)如果第一个栈已满,而第二个栈为空时,将第一个栈中的元素取出,压入第二个栈。 (3)如果第原创 2017-10-31 22:45:40 · 1229 阅读 · 0 评论 -
栈的应用之括号匹配
栈的应用之括号匹配: (1)遇到“【、(、{”入栈; (2)遇到“】、)、}”和栈顶元素比较是否匹配; 匹配则删除栈顶元素; 不匹配则返回#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define ElemType char#define maxsize 20typ原创 2017-11-03 13:05:40 · 298 阅读 · 0 评论 -
数据结构之快速排序
数据结构之快速排序: 算法思想: 在待排序表中选择一个元素pivot作为基准,通过一趟排序将待排序表划分为两个独立的两部分,L[0~k-1]和L[k+1~length],使得L[0~k-1]的元素均小于pivot,L[k+1~length]的元素均大于pivot。此时,pivot放在了排序的最终位置上,这是一趟快速排序。 在递归的对L[0~k-1]、L[k+1~length]进原创 2017-11-13 16:08:44 · 402 阅读 · 0 评论 -
数据结构之希尔排序
数据结构之希尔排序: 算法思想: 每隔dk个元素取出待排序表中的元素,构成一组,分别进行直接插入排序,随着增量dk的不断减小,待排序表将基本有序。当dk=1时,即最后一次为直接插入排序。整个有序表将是有序的。 代码:#include<stdio.h>#define ElemType int#define maxsize 21typedef struct{ ElemType da原创 2017-11-13 14:35:13 · 384 阅读 · 0 评论 -
数据结构之二叉树的中序非递归遍历
二叉树的中序非递归遍历#include<iostream>#include<stdio.h>#include<stdlib.h>#include<stack>#define ElemType int#define maxsize 100using namespace std;typedef struct BiNode{ ElemType data; struct BiNo原创 2017-12-01 10:42:26 · 478 阅读 · 0 评论 -
数据结构之排序二叉树递归建立,递归查找
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define ElemType int#define maxsize 20typedef struct BSTNode{ ElemType data; struct BSTNode* lchild; struct BSTNode* rchild;}*BS原创 2017-11-25 23:07:03 · 567 阅读 · 0 评论