![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
褚赢宇
这代码这么烂谁写的?哦........我写的
展开
-
哈夫曼树和哈夫曼编码
网上各位博主关于哈夫曼树的文章很多,所以对其不展开过多的描述。哈夫曼树,其就是给出n个节点,然后根据其权重,每次找出最小权重和次小权重的两个节点,然后这两个节点的权重加起来形成一个新的节点。然后新的节点和原来的节点重复第一步的步骤。最后会发现形成一棵二叉树。#define MAXVALUE 32767;#include<iostream>;#include<iomanip>using namespace std;typedef struct { int weigh原创 2021-11-05 11:40:37 · 173 阅读 · 0 评论 -
栈和队列基本操作
栈和队列的基本操作(1)顺序栈(2)链栈(3)链队列以下代码仅仅作为参考世上没有完美的代码,只有更好的代码。从健壮性的角度考虑以下代码可能在特殊情况下会出现错误,所以仅仅作为参考思路。(1)顺序栈#include<iostream>using namespace std;typedef int ElementType;#define MAXSIZE 100typedef struct node { ElementType Data[MAXSIZE]; .原创 2021-10-12 14:36:44 · 901 阅读 · 0 评论 -
图的两种遍历DFS和BFS(深度优先和广度优先)
邻接矩阵的深度优先和广度优先如下:对邻接矩阵进行定义#include<stdio.h>typedef int ElementType;typedef char VertexType;#define MAXVEX 100#define INFINITY 65535typedef struct { //对邻接矩阵进行定义 VertexType vexs [MAXVEX]; ElementType arc [MAXVEX][MAXVEX]; int n原创 2021-09-30 10:54:42 · 197 阅读 · 0 评论 -
单链表的基本操作(全)
#include<stdio.h>#include<stdlib.h>#define ERROR NULLtypedef int ElemType;typedef struct LNode *PtrToLNode;typedef struct LNode { //对节点的定义 int Date; struct LNode *next;}LNode;typedef PtrToLNode List;typedef PtrToLNode Post.原创 2021-09-27 11:22:30 · 1635 阅读 · 0 评论 -
线性表的基本操作
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5#define ERROR -1#define false -1#define true 1typedef int ElementType;typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /...原创 2021-09-19 15:21:28 · 152 阅读 · 0 评论 -
图的存储方式
图状结构是非常复杂的结构,图也是非常复杂的,所以图的存储就是一个非常重要的部分,因为我们不仅要表示顶点集,还要表示边集,如何完整准确的表示图呢。(参考书籍:大话数据结构)(1)邻接矩阵:图的邻接矩阵存储方法是用两个数组来表示图,一个一维数组存储图中顶点的信息,一个二维数组来存储图中边或者弧的信息。设G=(V,E)是一个图,当(Vi,Vj)之间有边时,则A[i][j]=1,否则为0;对于带权图来说,当(Vi,Vj)之间有边时,数组A[i][j]则存储权重,否则为无穷大。..原创 2021-09-16 22:42:57 · 1683 阅读 · 0 评论 -
约瑟夫环(数组解决)
约瑟夫环问题是一个很经典的问题:一个圈共有N个人(N为不确定的数字),第一个人的编号为0或者1(两个都可以,看你的程序如何编写),假设这边我将第一个人的编号设置为1号,那么第二个人的编号就为2号,第三个人的编号就为3号,第N个人的编号就为N号,现在提供一个数字M,第一个人开始从1报数,第二个人报的数就是2,依次类推,报到M这个数字的人出局,紧接着从出局的这个人的下一个人重新开始从1报数,和上面过程类似,报到M的人出局,直到N个人全部出局,请问,这个出局的顺序是什么?如果不用数据结构的循环链表,用数组.原创 2021-09-12 22:09:05 · 1986 阅读 · 0 评论 -
6-12 二叉搜索树的操作集
本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );其中BinTree结构定义如下:原创 2021-09-04 11:52:12 · 72 阅读 · 0 评论 -
6-11 先序输出叶结点
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数PreorderPrintLeaves应按照原创 2021-08-29 11:18:49 · 67 阅读 · 0 评论 -
6-10 二分查找
本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线性表,其中ElementTyp原创 2021-08-28 20:07:17 · 105 阅读 · 0 评论 -
二叉树的遍历 (25 分)
本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTre原创 2021-08-27 18:06:05 · 152 阅读 · 0 评论 -
6-8 求二叉树高度 (20 分)
本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数返回给定二叉树BT的高度值。裁判测试程序样例:#include <st原创 2021-08-26 09:50:41 · 96 阅读 · 0 评论 -
6-7 在一个数组中实现两个堆栈 (20 分)
本题要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:typedef int Position;struct SNode { ElementType *Data;原创 2021-08-21 11:44:02 · 171 阅读 · 0 评论 -
6-6 带头结点的链式表操作集
本题要求实现带头结点的链式表操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType原创 2021-08-18 21:41:50 · 132 阅读 · 0 评论 -
6-5 链式表操作集 (20 分)
函数接口定义:Position Find( List L, ElementType X );List Insert( List L, ElementType X, Position P );List Delete( List L, Position P );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef P原创 2021-08-18 07:34:11 · 62 阅读 · 0 评论 -
6-4 链式表的按序号查找 (10 分)
本题要求实现一个函数,找到并返回链式表的第K个元素。函数接口定义:ElementType FindKth( List L, int K );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List;L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回原创 2021-08-17 09:35:58 · 2089 阅读 · 0 评论 -
6-3 求链式表的表长 (10 分)
本题要求实现一个函数,求链式表的表长。函数接口定义:int Length( List L );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List;L是给定单链表,函数Length要返回链式表的长度。裁判测试程序样例:#include <stdio.h>原创 2021-08-16 08:55:22 · 208 阅读 · 0 评论 -
6-2 顺序表操作集
本题要求实现顺序表的操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode {转载 2021-08-15 17:38:52 · 156 阅读 · 0 评论 -
如何将单链表逆转(超详细)
单链表逆转的方法有很多,我也从很多博主那学习看到了各种各样的方法。今天就给大家总结一下个人认为较简便的四种方法。这四种方法不用开辟新的空间,所以不会造成空间浪费。方法一:迭代采用迭代的基本思路如下:我假设链表为1->2->3->4,那么但我完成链表的逆转后就应该是4->3->2->1。我将链表的头结点设为L,同时开辟两个新的节点q和p,我将利用L,q,p三个节点来进行迭代。List Reverse(List L) { List p, q;.原创 2021-08-13 20:38:45 · 13881 阅读 · 11 评论