![](https://img-blog.csdnimg.cn/20210913223858293.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 54
我与数据结构
多低调
Java与C
展开
-
栈——匹配括号
用栈来判断输入的括号是否合法。()、[]、{}、{[()]}、{()[]{}}这些都是合法的;([)]、(]}这些都是不合法的。用一个栈,输入一行括号序列,挨个读取,当读到左括号时('('、'['、‘{’)就把他入栈,然后继续读取;当读到右括号时(')'、']'、‘}’)就出栈,判断出栈的括号是否与当前的右括号匹配。代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string,h.原创 2022-01-06 11:31:19 · 450 阅读 · 0 评论 -
数组模拟单链表
链表中每个结点只有两个部分:值域和指针域;值域存放的是自身的值,指针域放的就是下一个结点的地址,如果指针域用数组表示的话,也就是下一个结点的值的下标。所以用两个数组来模拟单链表,一个data数组表示值域(存的是结点的值),一个next数组表示指针域(存的是下一个结点在data数组里的下标)。如图:next数组的下标是当前结点的下标,next的元素对应着是当前结点的下一个结点的下标。比如:next[0]表示data[0]的下一个结点的下标是1,即a的下一个结点b在data数组里.原创 2022-01-06 11:18:59 · 449 阅读 · 2 评论 -
纸牌游戏——小猫钓鱼(队列、栈)
游戏规则:将一副扑克牌分成两份,每人拿一份,A先拿出一张牌放在桌上,然后B在拿出一张牌放在桌上并放在A的那张牌上面,就这样二人交替出牌。出牌时,如果某人打出的牌与桌上某张牌牌面相同,即可获得两张相同的牌及其中间所夹的牌,并依次放到自己手中的牌的末尾,当任意一人手牌全部出完时,游戏结束,对手胜。思路:首先A和B只有两个操作,出牌和赢牌,而出牌和赢牌操作就如同队列,一头出一头进,先进先出,所以定义一个队列的结构体来代表两人的手牌。//队列typedef struct queue { int.原创 2022-01-06 10:05:30 · 4303 阅读 · 0 评论 -
数据结构哈希表的基本操作(C语言)
设有一组关键字(19,14,23,1,68,20,84,27,56,11,10,79),建立一个哈希查找表。(1)哈希函数采用: H(key)= key % P(其中P=13),若发生冲突后,用链地址法解决冲突。(2)哈希函数采用: H(key)= key % P(其中P=13),若发生冲突后, 用线性探测再散列方法解决冲突。编写程序建立哈希查找表,运行程序在表中查找68,99。目录1、哈希表结点结构与哈希函数2、链地址法2.1、初始化2.2、插入2.3、查找3、线性..原创 2021-12-09 10:52:07 · 4087 阅读 · 5 评论 -
数据结构二叉排序树的 基本操作(C语言)
随机产生一组关键字,利用二叉排序树的插入算法建立二叉排序树,然后删除某一指定关键字元素。目录1、二叉排序树的结构2、插入结点3、查找结点4、创建二叉树5、删除结点6、完整测试源码1、二叉排序树的结构就是一般二叉树的结构。//二叉排序树typedef struct BST { int data; //值域 struct BST* left; //左孩子 struct BST* right; //右孩子}*BST;2、.原创 2021-12-09 10:21:06 · 6416 阅读 · 3 评论 -
数据结构无向图的操作(C语言)
目录//1、含邻接矩阵的图结构//2、创建邻接矩阵//3、打印邻接矩阵//4、邻接表的图结构//5、创建邻接表//6、打印邻接表//7、深度优先搜索//8、广度优先搜索//9、带主函数完整测试源码//1、含邻接矩阵的图结构用邻接矩阵来表示图://定义邻接矩阵的图结构typedef struct graph { elemtype data[N + 1];//存放顶点,不使用data[0]存放 int side[N + 1][N + 1];//邻接矩阵,同原创 2021-12-02 23:43:11 · 4199 阅读 · 0 评论 -
数据结构哈夫曼树的基本操作(C语言)
目录//1、树的结构定义//2、创建哈夫曼树//2、 根到叶子的路径//3、哈夫曼编码//1、树的结构定义#define n 4 //叶子结点个数#define m 2*n-1 //树的个数typedef struct HFTree { int weight; //权值 int parent; //双亲 int left; //左儿子 int right; //右儿子}*HF;HF hftree[m+1]; //下标从1开始计数,树的结点都是存在这个数组里的,通.原创 2021-11-10 21:43:12 · 2574 阅读 · 0 评论 -
数据结构二叉树的常规算法(C语言)
求二叉树叶子结点个数。 求二叉树的宽度。 求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。 输出二叉树中从每个叶子结点到根结点的路径。目录//树的结构定义//求叶子结点个数//求树的宽度//求树的深度//求最长路径//求叶子节点到根节点的路径//树的结构定义//二叉树:typedef struct BTree { elemtype data; struct BTree* left; struct BTree* right;}*BT..原创 2021-11-07 20:02:51 · 2185 阅读 · 1 评论 -
数据结构线索二叉树的操作(C语言)
线索二叉树简单来说就是利用原来的指针域通过标记区分将每个节点的直接前驱和后继结点记录下来,这个记录下前后结点的过程就叫线索化,线索化后的二叉树就是线索二叉树。主要写了前序、中序、后序三种方法的线索化,前序和中序的两种遍历方式。目录//树结构定义及主函数//用队列初始化树//前序线索化//中序线索化//后序线索化//前序遍历线索二叉树//中序遍历线索二叉树//树结构定义及主函数typedef char ElemType; //定义元素类型#define.原创 2021-11-01 16:43:15 · 534 阅读 · 0 评论 -
数据结构二叉树的基本操作(C语言)
要求数据域为字符的一棵二叉树用广义表形式输入,创建一个采用二叉链表存储的二叉树,并按广义表的形式输出这棵二叉树。 完成这棵二叉树的中序遍历的递归算法。 完成这棵二叉树的中序遍历的非递归算法。主要是写广义表形式的输入输出和递归于非递归的中序遍历。但我多写了其他操作,因为操作不熟,导致bug横生,日后再改,单个功能函数可供参考。目录//头文件//主函数顺序存储//主函数//初始化//打印//插入//删除//关系//修改//遍历链式存储...原创 2021-10-03 08:13:41 · 2810 阅读 · 2 评论 -
数据结构栈的基本操作(C语言)
要求:1.采用顺序存储实现栈的初始化、入栈、出栈操作。2.采用链式存储实现栈的初始化、入栈、出栈操作。3.写一个程序,将输入的十进制数据M 转换为八进制数据M8,将其调试通过。在此基础上修改程序,实现十进制数据M 向N 进制(2或8或16)的转换。(1)采用顺序存储结构实现栈。(2)采用链表结构实现栈。其实就是单链表和顺序表的应用,效果如图:代码及详情如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h&...原创 2021-09-13 22:37:08 · 2606 阅读 · 0 评论 -
数据结构链串的基本操作(C语言)
关于顺序串的操作:数据结构顺序串的基本操作(C语言)链串跟链表一样,就是数据域的类型只能是char型,其他都没啥大改动,可以直接看功能实现函数部分代码及详情如下:#include<stdio.h>#include<malloc.h>#include<assert.h>typedef struct LinkString { char data; struct LinkString* next;}String;//函数声明.原创 2021-09-25 14:18:48 · 1783 阅读 · 0 评论 -
数据结构顺序串的基本操作(C语言)
串的定义串(string)是零个或多个字符组成的有限序列。一般记为:S="a1a2…an"(n≥0)其中S是串的名字,用双引号括起来的字符序列是串的值,但双引号是界限符,它不属于串,其作用是避免与变量名或常量混淆。ai(1≤i≤n)称为串的元素,它可以是任意字母、数字或其他字符,是构成串的基本单位,i是它在整个串中的序号。n是串中字符的个数,称为串的长度,表示串中所包含的字符个数。例如串S1="abcd",串的每一个元素为一个字母,其长度为4。而S2="12345",串的每一个元素为一个数字,其长原创 2021-09-23 13:57:26 · 4791 阅读 · 0 评论 -
图记逆置单链表的两种方法(C语言)
第一种,适用于带头结点得链表:代码如下: struct ListNode { int val; struct ListNode *next; }; struct ListNode* ReverseList(struct ListNode* head ) { struct ListNode* mid; //中间的结点,用来操作的 struct ListNode* front; //前面的结点 struct ListNode* rear; //后原创 2021-09-19 20:04:07 · 193 阅读 · 0 评论 -
数据结构队列的基本操作(C语言)
队列(Queue)是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出(Fist In Fist Out,缩写为FIFO)的特性。这与我们日常生活中的排队是一致的,最早进入队列的人最早离开,新来的人总是加入到队尾。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。本次只写了顺序队列和链队的基本操作,以及一个利用队来实现的将随机数奇偶分配输出的程序,不太严谨,尚待改进,可供参考这次并不是写在一个源文件里的,而是分了...原创 2021-09-18 17:12:07 · 3950 阅读 · 0 评论 -
数据结构共享栈的基本操作(C语言)
数据结构顺序栈和链栈????:https://blog.csdn.net/weixin_46263870/article/details/120277067https://blog.csdn.net/weixin_46263870/article/details/120277067共享栈:两个栈共享一块存储空间,这块空间不是哪一个栈的,哪个栈需要的多一些就可能会得到的多一些。两个栈的栈顶指针分别在这块空间两端的位置,入栈的时候两个指针向里靠拢,出栈两个指针向外远离,如图:效果如图:原创 2021-09-17 07:29:06 · 1330 阅读 · 0 评论 -
数据结构循环链表解决约瑟夫问题(C语言)
首先了解约瑟夫问题:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这.原创 2021-09-15 16:30:50 · 481 阅读 · 0 评论 -
数据结构顺序表基本操作(C语言)
困扰了我两天的东西,经过不懈努力终于在今天给我整出来了,然后回首一看,才发现没什么太难的点,哎吃了上学期C语言上课睡觉的亏,关于结构体这一方面我到现在都是半懂,更不要说刚接手做这个顺序表的时候哦,这是数据结构课要求的,得谢谢老师。我的代码可能在大佬眼里十分的浅显简单,确实如此,我的C语言结构这一部分就只能这样了,这个博客希望能给和我一样的同学一些启发一些帮助,也让我能随时来看看改改,如有大佬,望不吝赐教。运行效果如图:(就截了个菜单界面)代码及详情如下:#define _CRT_SEC原创 2021-09-04 18:09:30 · 728 阅读 · 4 评论 -
数据结构单链表的基础操作(C语言)
效果如图:代码及详情如下:(文末总结)#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<malloc.h>#include<stdlib.h>//创建结构体typedef struct Node { int data;//数据域 struct Node* next;//指针域}Node;//函数声明void menu();Node* createList(Node*.原创 2021-09-09 18:45:20 · 923 阅读 · 0 评论