数据结构
数据结构
Wonz
后端 -> 全栈 -> 后端
技术很菜,但一直在学习。
「人们会被自己热爱的事物改变」
展开
-
查找普通单链表中最小值,插入到最前面
题目:设有不带表头结点的单链表,表中元素各不相同,设计一个算法找出单链表的最小值,并将其插入到链表中第一个结点之前。思路:定义三个指针,一个q用来比较,一个p用来标记min的位置,一个r用来标记min前一个位置。注意:要分类讨论。min在第一位的时候,不需要变化。min在第二位的时候,只要让r指向first就行。min在后面其他位置。代码:Status Min(SingleList *L, int...原创 2018-03-28 10:33:20 · 7526 阅读 · 5 评论 -
判断带表头的单链表是否有序递增
题目 设计一个算法判定带表头结点的单链表是否有序递增,并讨论算法的时间复杂度。部分代码判断是否有序递增Status order(HeaderList *h, int n){ int flag=-1; //判定标志 Node *p = h->head->link,*q=p->link; while(p->li...原创 2018-09-01 23:56:09 · 5898 阅读 · 2 评论 -
删除单链表中多个重复值
题目 在不带表头结点的单链表,增加一个函数,删除表中指定的元素值 x ,假设该元素值在单链表中可能出现多次。部分代码删除多个重复值函数PS:此函数有漏洞,有些情况不能实现题目所述功能,待改进。Status del(SingleList *L, int n,int y){ Node *q,*p,*t; int j,i=0; if(...原创 2018-09-01 23:57:56 · 1031 阅读 · 3 评论 -
单链表的逆置
题目 编写程序实现对单链表的逆置。逆置函数void invert(SingleList *L){ Node *p = L->first, *q; L->first = NULL; while(p){ q = p->link; p->link = L->first; //p-&g...原创 2018-09-01 23:59:04 · 2049 阅读 · 2 评论 -
用队列将栈中元素逆置
题目 编程实现利用队列将栈中元素逆置的算法。逆置函数void Inverse(Stack *S,Queue *Q){ ElemType x; while(!IsEmpty(S)){ //函数重载 Top(S,&x); EnQueue(Q,x); Pop(S); } while...原创 2018-09-02 00:01:54 · 12483 阅读 · 2 评论 -
二叉树的遍历
二叉树的先序、中序、后序遍历。先序遍历构建二叉树//先序遍历构建二叉树BinaryTreeNode *PreCreateBt(BinaryTreeNode *t){ char ch; ch = getchar(); if(ch == '#'){ //输入为#表示这里建立空二叉树,即遍历算法的空操作...原创 2018-09-02 00:02:59 · 375 阅读 · 0 评论 -
二叉树遍历的应用
二叉树遍历的应用。求二叉树结点个数//求二叉树结点个数int Size(BinaryTreeNode *t){ if(!t) return 0; return Size(t->LChild) + Size(t->RChild) + 1;}求二叉树叶子结点个数//求二叉树叶子结点个数int Leaf(BinaryTreeNod...原创 2018-09-02 00:04:09 · 2156 阅读 · 9 评论 -
任意顶点的入度 / 出度
以邻接表形式存储,计算任意顶点的入度 / 出度。任意顶点的入度//任意顶点的入度void Degree(int *inDegree, LGraph *g, int u){ int i; ENode *p; inDegree[u] = 0; for(i = 0;i < g->n; ++i){ for(p = g-&...原创 2018-09-02 00:05:20 · 4914 阅读 · 3 评论 -
双向冒泡排序
双向冒泡排序。代码#include<cstdio>#include<algorithm>using namespace std;#define N 2001int main(){ int n,i,j,k; scanf("%d",&n); bool flag=false; long long a[N]=...原创 2018-09-02 00:06:41 · 2519 阅读 · 3 评论 -
计数排序
计数排序。代码#include<cstdio>int main(){ int i,j,n; int a[8]={0}; int b[8]={0}; int c[8]={0}; scanf("%d",&n); for(i = 0;i < n;i ++){ scanf("%d",&...原创 2018-09-02 00:07:46 · 205 阅读 · 0 评论 -
最大堆最小堆
最大堆:向下调整运算。代码/*// 最大堆#include&lt;cstdio&gt;#define N 100void AdjustHeap(int Heap[],int s,int m){ int temp = Heap[s]; for(int j = 2*s+1;j &lt;= m; j *= 2){ if(j &lt; m&a...原创 2018-09-02 00:08:39 · 514 阅读 · 0 评论 -
Prim 算法
普里姆(Prim)算法代码#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace std;const int MAXN = 2010;const int INF = 1 &lt;&lt; 30;int map[MAXN][MAXN];int N, M;int lowcost[MAXN...原创 2018-09-02 00:09:49 · 274 阅读 · 0 评论 -
南邮数据结构实验4:各种内排序算法
各种内排序算法简单选择排序//简单选择排序void SelectSort(List *list){ int small,i,j; for(i = 0;i &amp;lt; list-&amp;gt;n-1;i ++){ small = i; //标记每次第一位元素下标 f...原创 2018-09-02 00:11:05 · 10402 阅读 · 2 评论 -
顺序表的逆置
暑假都快结束了,才想起来把数据结构的笔记补一下。题目编写程序实现对顺序表的逆置。部分代码void Inverse(SeqList *L, int mSize) { int i, temp; for (i = 0; i < mSize / 2; i++) { temp = L->element[i]; L...原创 2018-08-31 22:54:30 · 26069 阅读 · 2 评论 -
南邮《数据结构A》2017/2018学年第二学期期末考试回忆
2018.6.29 16:00-17:50数据结构考试刚考完,趁着还有记忆,回忆一下考试题目。先总结一下:考试总体还是比较简单的。有考到很细的知识点,复习时要过一遍书,知识点要多看看。毕竟数据结构考编程不多,重要的是算法思想。一、填空题(10*2'=20')只记得几个了。1.告诉你AVL树的先序遍历,让你写出中序遍历。我一开始还傻傻地画图,后来一想到AVL树也叫排序树,瞬间就知道答案了,中序遍历...原创 2018-06-29 20:12:54 · 8051 阅读 · 11 评论 -
南邮数据结构实验1.1:顺序表的相关操作
题目:参照程序2.1~2.7,编写代码,完成顺序表的初始化、查找、插入、删除、输出、撤销等操作。部分代码:顺序表的结构体定义:typedef struct { int n; //顺序表的长度 int maxLength; //顺序表的最大长度 ElemType *element; //存放动态分配一维数组首地址}SeqList;...原创 2018-05-25 20:55:20 · 8454 阅读 · 1 评论 -
南邮数据结构实验1.2:带表头结点单链表的相关操作
题目:参照程序2.8~2.14,编写程序,完成带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作。部分代码:带表头结点单链表的结构体定义:typedef struct Node { ElemType element; //结点的数据域 struct Node * link; //结点的指针域}Node;typedef struct { struct ...原创 2018-05-26 11:19:27 · 6714 阅读 · 0 评论 -
南邮数据结构实验1.3:带表头结点单链表的逆置
题目:以实验1.2的带表头结点单链表为存储结构,编写程序实现单链表的逆置操作(要求不引入新的存储空间)。部分代码:带表头结点单链表的逆置函数://带表头结点单链表的逆置void Inverse(HeaderList *h){ Node *p=h->head->link,*q; h->head->link = NULL; while(p){ q=p-...原创 2018-05-26 11:34:17 · 8276 阅读 · 1 评论 -
南邮数据结构实验1.4:带表头结点单链表的非递减排序
题目:以实验 1.2 的带表头结点单链表为存储结构,编写程序实现单链表的非递减排序。部分代码:带表头结点单链表的非递减排序函数:本来想用冒泡排序的,但是没成功,此部分程序参考了这里:https://bbs.csdn.net/topics/390668062//简单选择排序:每次选择min的排到前面Status Order(HeaderList *h){ Node *s1...原创 2018-05-26 16:49:12 · 7125 阅读 · 9 评论 -
南邮数据结构实验1.5:一元多项式的相加和相乘
题目:编写程序实现一元多项式的创建、输出、撤销以及两个一元多项式相加和相乘的操作。部分代码:带表头结点一元多项式的结构体定义:typedef struct PNode{ int coef; //系数 int exp; //指数 struct PNode* link;}PNode;typedef struc...原创 2018-05-26 19:45:18 · 9291 阅读 · 2 评论 -
南邮数据结构实验2.1:二叉树的先序创建、先序遍历、中序遍历、后序遍历
题目:参照程序5.1~5.4,编写程序,完成二叉树的先序创建、先序遍历、中序遍历、后序遍历等操作。部分代码:二叉树结构体定义:typedef struct BinaryTreeNode{ T Data; struct BinaryTreeNode *LChild, *RChild;}BinaryTreeNode;先序遍历构建二叉树://先序遍历构建二叉树...原创 2018-05-27 16:31:58 · 9308 阅读 · 3 评论 -
南邮数据结构实验2.2:二叉树遍历的一些应用
题目:以实验2.1的二叉链表为存储结构,编写程序实现求二叉树结点个数、叶子结点个数、二叉树的高度以及交换二叉树所有左右子树的操作。部分代码:求二叉树结点个数://求二叉树结点个数int Size(BinaryTreeNode *t){ if(!t) return 0; return Size(t->LChild) + Size(t->RChild) + ...原创 2018-05-27 16:40:57 · 7208 阅读 · 1 评论 -
南邮数据结构实验3.1:邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作
题目:参照程序9.1~程序9.5,编写程序,完成邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作。部分代码:邻接矩阵的结构体定义://邻接矩阵的结构体定义typedef struct{ ElemType **a; //邻接矩阵 int n; //图的当前顶点数 int e; //图的当前边数 El...原创 2018-06-30 12:38:04 · 9781 阅读 · 7 评论 -
南邮数据结构实验3.2:以邻接矩阵为存储结构的图的深度、宽度优先遍历
题目:以实验3.1所示邻接矩阵为存储结构,编写程序,实现图的深度、宽度优先遍历。部分代码:邻接矩阵的单一顶点DFS://邻接矩阵的单一顶点DFSvoid DFS(int v,int visited[],mGraph g){ int j; printf("%d ",v); //访问顶点v visited[v] = 1; ...原创 2018-06-30 15:08:10 · 7193 阅读 · 1 评论 -
南邮数据结构实验3.3:邻接表的初始化、撤销、边的搜索、插入、删除等操作
题目:参照程序9.6~程序9.10,编写程序,完成邻接表的初始化、撤销、边的搜索、插入、删除等操作。部分代码:邻接表的结构体定义://邻接表的结构体定义typedef struct ENode{ int adjVex; //任意顶点u相邻的顶点 ElemType w; //边的权值 struct ENode *...原创 2018-06-30 23:44:24 · 9376 阅读 · 7 评论 -
南邮数据结构实验3.4:以邻接表为存储结构的图的深度、宽度优先遍历
题目:以实验3.3所示邻接表为存储结构,编写程序,实现图的深度、宽度优先遍历。部分代码:邻接表的单一顶点DFS://邻接表的单一顶点DFSvoid DFS(int v,int visited[],LGraph g){ ENode *w; printf("%d ",v); //访问顶点v visited[v]...原创 2018-06-30 23:44:46 · 5814 阅读 · 2 评论 -
南邮数据结构实验3.5:飞机换乘最短距离(Dijkstra单源最短路径)
题目:编写程序,实现智能交通中的最佳路径选择问题:设有n个地点,编号为0~n-1,m条路径的起点、终点和代价由用户输入提供,采用实验3.1所示邻接矩阵为存储结构,寻找最佳路径方案(如花费时间最少、路径长度最短、交通费用最小等,任选其一即可)。部分代码:选出最小的d[i]://选出最小的d[i],i ∈ V-Sint Choose(int d[],int n,int s[]){ /...原创 2018-06-30 23:49:47 · 5128 阅读 · 2 评论 -
各种内排序算法性能比较
各种内排序算法性能比较(个人总结) 稳定性 最好情况 最坏情况 平均 空间复杂度 确定最终位置 简单选择排序 (属于选择排序) 不稳定 O(n²) n-1 趟 O(n²) n-1 趟 O(n²) n-1 趟 O(1) 直接插入排序 稳定 O(n) n-1 趟 O(n²) ...原创 2018-09-02 00:12:44 · 1747 阅读 · 1 评论