
数据结构
数据结构详解及源码
梖梖
这个作者很懒,什么都没留下…
展开
-
2022北化842数据结构考研专业课回忆 6--10
abcde分别为(0.1,0.2,0.2,0.15,0.35)组成哈夫曼编码,abcdae占比特位数:15。~ 矩阵中第i列的第一个非零元素的恰当位置:copt[i] = copt[i-1] + num[i-1];7、一个四维数组[4,5,6,7],起始地址为(0,0,0,0),计算数(1,2,0,3)的位置。9、字符串的行,列,非零元素分别为: n, m, t,字符串快速转置时间复杂度为()~ 邻接表与顶点有关;~ 平衡二叉树,一个节点的平衡因子为-2,他的子节点都为1,它应该如何调整。原创 2025-04-01 14:00:40 · 230 阅读 · 0 评论 -
数据结构地址计算
数组。原创 2023-12-13 07:49:02 · 96 阅读 · 0 评论 -
类和结构体的区别
定义:public struct Student{ string Name; int Age;}public class Question{ int Number; string Content;}使用:Student s=new Student();Question q=new Question();两者都是container类型,这表示它们可以包含其他数据类型作为成员。 两者都拥有成员,包括:构造函数、方法、属性、字段、常量、枚举类型、事件...原创 2021-12-01 17:00:36 · 589 阅读 · 0 评论 -
单链表带头结点C语言实现详细代码
//单链表 带头结点#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//初始化单链表LinkList initList(LinkList list){ LNode *newNode=(LNode *)malloc(sizeof(LNode)); if(newNode==NULL){ re.原创 2021-10-14 19:54:12 · 303 阅读 · 0 评论 -
直接插入排序算法
//直接插入排序算法#include "seqlist.cpp"void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序{ int i, j; RecType tmp; for (i=1;i<n;i++) { if (R[i].key<R[i-1].key) //反序时 { tmp=R[i]; j=i-1; do //找R[i]的插入位置 { R[j+1]=R...原创 2021-12-10 13:40:25 · 245 阅读 · 0 评论 -
顺序队列(非环形队列)基本运算算法
//顺序队列(非环形队列)基本运算算法#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct { ElemType data[MaxSize]; int front,rear; //队头和队尾指针} SqQueue;void InitQueue(SqQueue *&q){ q=(SqQueue *)mallo...原创 2021-12-10 13:40:49 · 251 阅读 · 0 评论 -
顺序栈基本运算算法
//顺序栈基本运算算法#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct { ElemType data[MaxSize]; int top; //栈指针} SqStack; //顺序栈类型void InitStack(SqStack *&s){ s=(SqStack *)malloc(sizeof...原创 2021-12-10 13:40:35 · 488 阅读 · 0 评论 -
集合的并,集合的交,集合的差C
//文件名:exp2-6.cpp#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct LNode //定义单链表结点类型{ ElemType data; struct LNode *next;} LinkList;extern void DispList(LinkList *L);extern void DestroyList(LinkList *&...原创 2021-12-10 13:40:58 · 129 阅读 · 0 评论 -
双链表的基本操作
//文件名:algo2-3.cpp#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct DNode //定义双链表结点类型{ ElemType data; struct DNode *prior; //指向前驱结点 struct DNode *next; //指向后继结点} DLinkList;void InitList(DLinkList *&L) /...原创 2021-12-10 13:41:23 · 110 阅读 · 0 评论 -
单链表基本操作
//文件名:algo2-2.cpp#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct LNode //定义单链表结点类型{ ElemType data; struct LNode *next;} LinkList;void InitList(LinkList *&L) //初始化线性表{ L=(LinkList *)malloc(sizeof...原创 2021-12-10 13:41:32 · 148 阅读 · 0 评论 -
开放地址法构造的哈希表的运算算法
可直接执行的源码开放地址法构造的哈希表的运算算法//开放地址法构造的哈希表的运算算法#include <stdio.h>#define MaxSize 100 //定义最大哈希表长度#define NULLKEY -1 //定义空关键字值#define DELKEY -2 //定义被删关键字值typedef int KeyType; //关键字类型typedef struct{ KeyType key; //关键字域 int count; //原创 2021-12-10 13:41:40 · 275 阅读 · 0 评论 -
快速排序源码
//快速排序算法#include "seqlist.cpp"int count=0;int partition(RecType R[],int s,int t) //一趟划分{ int i=s,j=t; RecType tmp=R[i]; //以R[i]为基准 while (i<j) //从两端交替向中间扫描,直至i=j为止 { while (j>i && R[j].key>=tmp.key) j--; //从右向左扫描,...原创 2021-12-10 13:42:06 · 409 阅读 · 0 评论 -
单链表的直接运算
//文件名:exp2-2.cpp#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct LNode //定义单链表结点类型{ ElemType data; struct LNode *next;} LinkList;extern void InitList(LinkList *&L);extern void DestroyList(LinkList ...原创 2021-12-11 10:43:02 · 129 阅读 · 0 评论 -
顺序表直接运算
//文件名:exp2-1.cpp#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct { ElemType data[MaxSize]; int length;} SqList;extern void InitList(SqList *&L);extern void DestroyList(SqList *L);...原创 2021-12-11 10:43:11 · 127 阅读 · 0 评论 -
希尔排序算法
Shell排序算法//Shell排序算法#include "seqlist.cpp"void ShellSort(RecType R[],int n) //希尔排序算法{ int i,j,d; RecType tmp; d=n/2; //增量置初值 while (d>0) { for (i=d;i<n;i++) //对所有组采用直接插入排序 { tmp=R[i]; //对相隔d个位置一组采用直接插入排序 j=i-d; while (j>=0原创 2021-12-11 10:43:21 · 241 阅读 · 0 评论 -
折半查找算法源码
折半查找算法//折半查找算法#include "seqlist.cpp"int BinSearch(RecType R[],int n,KeyType k) //折半查找算法{ int low=0,high=n-1,mid; while (low<=high) //当前区间存在元素时循环 { mid=(low+high)/2; if (k==R[mid].key) //查找成功返回其逻辑序号mid+1 return mid+1; if (k<R[mid]原创 2021-12-11 10:43:28 · 569 阅读 · 0 评论 -
折半插入排序算法
主程序代码块://折半插入排序算法#include "seqlist.cpp"void BinInsertSort(RecType R[],int n){ int i, j, low, high, mid; RecType tmp; for (i=1;i<n;i++) { if (R[i].key<R[i-1].key) //反序时 { tmp=R[i]; //将R[i]保存到tmp中 low=0; high=i-1; w原创 2021-12-11 10:43:35 · 312 阅读 · 0 评论 -
二叉树深度源码
编程实现求二叉树深度。//编程实现求二叉树深度。#include <stdio.h> #include <string.h>#include <stdlib.h>typedef struct BiTNode{ char data; /*结点的数据域*/ struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/} BiTNode , *BiTree;/*创建一棵二叉树*/void CreatBiTre原创 2021-12-10 13:41:55 · 371 阅读 · 0 评论 -
二叉树的先序遍历
编程实现采用二叉链表存储结构创建一个二叉树并进行先序遍历;//编程实现采用二叉链表存储结构创建一个二叉树并进行先序遍历; #include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0#define OVERFLOW -2#define NULL 0typedef char TElemType; typedef int Status;typedef struct BiTNode { // 结点结构TElemTyp.原创 2021-12-10 13:41:11 · 263 阅读 · 0 评论 -
用递归方法实现二叉树的中序遍历和后序遍历算法
用递归方法实现二叉树的中序遍历和后序遍历算法//用递归方法实现二叉树的中序遍历和后序遍历算法;#include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0#define OVERFLOW -2typedef char TElemType; typedef int Status;typedef struct BiTNode { // 结点结构TElemType data;struct BiTNode *原创 2021-12-09 19:12:48 · 2356 阅读 · 1 评论 -
单链表的基本操作
(1)通过键盘读取元素建立单链表;(2)指定一个位置,在此位置之前插入一个新元素;(3)指定一个位置,删除此位置元素。/*(1)通过键盘读取元素建立单链表;(2)指定一个位置,在此位置之前插入一个新元素;(3)指定一个位置,删除此位置元素。*/#include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef stru原创 2021-12-09 18:09:50 · 290 阅读 · 0 评论 -
顺序表的基本操作源码
(1)初始化顺序表;(2)给定一个整型数据元素,将此元素插入到顺序表的第i个位置;(3)删除顺序表中第i个位置的元素,利用e返回被删除的元素。/*(1)初始化顺序表;(2)给定一个整型数据元素,将此元素插入到顺序表的第i个位置;(3)删除顺序表中第i个位置的元素,利用e返回被删除的元素。*/#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define OVE原创 2021-12-09 18:08:00 · 266 阅读 · 0 评论 -
进制转换源码
十进制转八进制八进制转十进制#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2typedef int ElemType;typedef int Status;#define STACK_INIT_SIZE 10#define STACKINCREMENT 5typedef st原创 2021-12-09 18:00:59 · 4025 阅读 · 0 评论 -
循环队列实现配对问题应用
假设在交流会上,男生和女生分成两队,每一轮交流中,依次从男队和女队的队头各出一个人,两人组成一个交流组进行交流,交流后两人分别回归自己队伍的尾部。若两队初始人数不同,则较长那一队中没有交流对象的人等待下一轮的配对交流。写一算法,模拟上述配对问题,并输出每次配对结果。如:男队和女队的人数分别是5和3,每队的人都有一个编号(分别是12345和123),共交流4轮,则第一轮配对输出<1,1> <2,2> <3,3>,第二轮配对输出<4,1>...原创 2021-12-09 17:22:34 · 4442 阅读 · 0 评论 -
队列车厢编组源码
利用队列实现车厢编组问题。假设队列元素是char类型,'H'表示硬座,'S'表示软卧,队列A表示一组硬座和卧铺混编的车厢。要求把队列A中的硬座车厢移动到队列B,队列A中的卧铺车厢移动到队列C,同时保留原有硬座车厢之间和软卧车厢之间的先后顺序不变。如HSHHSHSSHH,分别输出软卧车组:SSSS和硬座车组:HHHHHH。//循环队列实现车厢编组#include <stdio.h>#include <stdlib.h>#define OK 1#de原创 2021-12-09 17:11:38 · 898 阅读 · 0 评论 -
折半查找算法源码
//折半查找算法 #include "stdio.h"#include "stdlib.h"#define MAXSIZE 30 typedef int KeyType; typedef struct{KeyType key; char name[20];}SElemType; typedef struct{SElemType elem[MAXSIZE]; int length;}SSTable;int Search_Bin(SSTable ST, KeyType key){.原创 2021-12-09 17:05:29 · 162 阅读 · 0 评论 -
栈c++源码
(1)初始化顺序栈;(2)给定一个元素,将此元素压入此栈中;(3)将栈顶一个元素弹出此栈。/*1、编程实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序栈;(2)给定一个元素,将此元素压入此栈中;(3)将栈顶一个元素弹出此栈。*/#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FAL原创 2021-12-09 16:51:02 · 757 阅读 · 0 评论 -
图的广度优先搜索算法
//编程建立无向图的邻接矩阵存储结构,实现图的广度优先搜索算法。//(1)采用邻接矩阵存储结构创建一个无向图。//(2)图的广度优先搜索算法的实现。////测试数据://无向图://4 3 //A B C D//A B 1//A C 1//B D 1 //...原创 2021-12-09 16:50:00 · 557 阅读 · 1 评论 -
图 深度优先搜索算法
//编程建立有向图的邻接矩阵存储结构,实现图的深度优先搜索算法。//(1)采用邻接矩阵存储结构创建一个有向图。//(2)图的深度优先搜索算法的实现。////输入以下测试数据://测试数据: 有向图://4 4 //A B C D//A B 1//A C 1//D B 1#include <iostream>/* run this program using th...原创 2021-12-09 15:26:45 · 821 阅读 · 0 评论 -
自底向上的二路归并排序算法源码
//自底向上的二路归并排序算法#include <malloc.h>#include "seqlist.cpp"void Merge(RecType R[],int low,int mid,int high) { RecType *R1; int i=low,j=mid+1,k=0; //k是R1的下标,i、j分别为第1、2段的下标 R1=(RecType *)malloc((high-low+1)*sizeof(RecType)); //动态分配空间 while (i&l.原创 2021-12-08 20:33:42 · 333 阅读 · 0 评论 -
后序线索二叉树—源码
//后序线索二叉树//二叉树--链式存储#include <stdio.h>#include <stdlib.h> #define MAXSIZE 100struct ThreadNode{ //数据域 int value; //左孩子 struct ThreadNode *lChild; //右孩子 struct ThreadNode *rChild; //1--前驱结点 0--左孩子 int ltag; //1--.原创 2021-12-08 20:03:00 · 243 阅读 · 0 评论 -
中序线索二叉树
//二叉树--中序链式存储//中序线索二叉树 #include <stdio.h>#include <stdlib.h> #define MAXSIZE 100struct ThreadNode{ //数据域 int value; //左孩子 struct ThreadNode *lChild; //右孩子 struct ThreadNode *rChild; //1--前驱结点 0--左孩子 int ltag; //.原创 2021-12-08 19:29:11 · 297 阅读 · 0 评论 -
先序线索二叉树 ——C源码(测试成功)
//二叉树--链式存储//先序线索二叉树 #include <stdio.h>#include <stdlib.h> #define MAXSIZE 100struct ThreadNode{ //数据域 int value; //左孩子 struct ThreadNode *lChild; //右孩子 struct ThreadNode *rChild; //1--前驱结点 0--左孩子 int ltag; //1--.原创 2021-12-08 19:50:23 · 373 阅读 · 0 评论 -
用循环单链表实现队列
假设以带头结点的单循环链表实现链式队列,并且要求只设尾指针,不设头指针,编写实现这种链式队列初始化、入队列和出队列操作的函数入队:我们只需要在尾节点后插入元素即可,需要注意的是,不可以使用尾插法,因为是循环链表,rear->next是头指针,所以我们应该在尾节点使用头插法,并让rear指向新队尾。出队:需要注意当出队后,队列为空时,rear指向头结点在不带头结点的循环链表中,(rear->next == rear) 表示该队列中只有一个元素; 在带头结点的循环链表中,(rear-...原创 2021-12-04 16:47:40 · 3156 阅读 · 0 评论 -
归并排序--C实现
一般用于对总体无序,但是各子项相对有序的数列。C语言int min(int x, int y) { return x < y ? x : y;}void merge_sort(int arr[], int len) { int *a = arr; int *b = (int *) malloc(len * sizeof(int)); int seg, start; for (seg = 1; seg < len; seg += seg) {原创 2021-12-04 16:24:51 · 90 阅读 · 0 评论 -
冒泡排序--让数逆向移动
从小到大排序//头文件#include <vector>using namespace std;//从小到大排序void bubbleSort_MinToMax(vector<int> &numberList){ int N = numberList.size(); for (int i = 1; i < N; i++) { for (int j = 0; j < N - i; j++) { if (numberList[j]原创 2021-12-04 16:09:59 · 155 阅读 · 0 评论 -
广义表实现
结构体typedef char DataType;//广义表结点类型的定义typedef struct GLNode{ int tag;//结点类型表示 union { DataType data; struct GLNode *sublist; }val; struct GLNode *link; //指向下一个元素};创建广义表假定广义表中的元素类型DataType为char类型,每个原子的值被限定为英文字母。并假定广义表是一个表达式,其格式为:元素之间用原创 2021-12-04 16:02:52 · 125 阅读 · 0 评论 -
最小生成树和最短路径的区别
最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径。最短路径是从一点出发,到达目的地的路径最小。最小生成树所有点被连通 。把连通的图的所有顶点连起来路径之和最小的问题,即生成树总权值之和最小。整体来分析。最短路径不一定所有点。只着眼于点与点之间的路径问题,并不关注整个图,也就意味着对一个节点运行算法的结果与另一个节点的结果之间没有多少关系。单条路径来分析。Prims算法代码while(alreadyVisited.size() != Switches.s.原创 2021-12-04 15:56:27 · 2114 阅读 · 0 评论 -
字符串排序
按字典排序#include<iostream>#include<string>#include<algorithm>using namespace std;int main() { string a[3]; for (int i = 0; i < 3; i++) cin >> a[i]; sort(a, a + 3); cout <<'\n' <<a[0] &l原创 2021-12-01 18:07:06 · 503 阅读 · 0 评论 -
快排算奖学金
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前55名学生发奖学金。期末,每个学生都有33门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。任务:先根据输入的33门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名学生的学号和总分。注意,在前55名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则...原创 2021-12-01 17:24:20 · 170 阅读 · 0 评论