
数据结构
文章平均质量分 57
迂者-贺利坚
烟台大学计算机学院教师,坚持教育情怀,持续进行教学改革。和学生并肩,与不良学风作斗争,为IT菜鸟建跑道,追求快乐与激情的大学。著书《逆袭大学:传给IT学子的正能量》,帮助迷茫中的大学生。
展开
-
数据结构例程——线性表顺序存储的应用
本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程。例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素。 要求:时间复杂度为O(n)、空间复杂度为O(1)的算法解法0:用基本运算实现,不满足复杂度要求 (注:本文中所需要的list.h和list.cpp见点击参照…)#include "list.h原创 2015-09-08 07:35:54 · 3442 阅读 · 4 评论 -
数据结构实践——单链表:逆置、连接与递增判断
本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目 - 单链表算法】(程序中利用了已经实现的单链表算法,头文件LinkList.h及其中函数的实现见单链表算法库) 1、已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n,请设计算法将L2连接到L1的后面。实现这个算法,完成测试,并分析这个算法的复杂度。 [参考解答]#include <stdio.h>#includ原创 2015-09-11 21:03:47 · 5679 阅读 · 3 评论 -
数据结构实践——循环双链表应用
本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目- 循环双链表应用】 设非空线性表ha和hb都用带头节点的循环双链表表示。设计一个算法Insert(ha,hb,i)。其功能是:i=0时,将线性表hb插入到线性表ha的最前面;当i>0时,将线性表hb插入到线性表ha中第i个节点的后面;当i大于等于线性表ha的长度时,将线性表hb插入到线性表ha的最后面。 请在实现算法时,除原创 2015-09-12 12:07:02 · 2701 阅读 · 0 评论 -
数据结构实践项目——链表
本组项目针对《数据结构基础系列(2):线性表》课程第8-15节 8. 线性表的链式存储 9. 建立单链表 10. 单链表基本操作的实现 11. 单链表应用举例 12. 双链表 13. 循环链表 14. 线性表的应用 15. 有序表 【项目1 - 建立单链表】 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 请在下面代码的基础上开展工作:原创 2015-09-12 11:26:19 · 5449 阅读 · 0 评论 -
数据结构之自建算法库——双链表
本文针对数据结构基础系列网络课程(2):线性表中第12课时双链表。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。 双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:dlinklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef DLINKLIST_H_INCLUDED#define原创 2015-09-11 21:43:37 · 3289 阅读 · 2 评论 -
数据结构例程——线性表的应用:表的自然连接
数据结构例程——两个表的自然连接本文针对数据结构基础系列网络课程(2):线性表中第14课时线性表的应用。问题:有表A,m1行、n1列,表B,m2行、n2列,求A和B的自然连接结果C 例: 解答:#include <stdio.h>#include <malloc.h>#define MaxCol 10 //最大列数typedef int ElemType;typede原创 2015-09-11 22:09:40 · 4408 阅读 · 8 评论 -
数据结构之自建算法库——循环单链表
本文针对数据结构基础系列网络课程(2):线性表中第13课时双链表。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:clinklist.h,包含定义双链表数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef CLINKLIST_H_INCLUDED#define CL原创 2015-09-12 06:55:51 · 3345 阅读 · 2 评论 -
数据结构之自建算法库——单链表
本文针对数据结构基础系列网络课程(2):线性表中第10课时单链表基本操作的实现,建立单链表数据存储结构基本操作的算法库。 按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。 单链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LIN原创 2015-09-11 17:00:31 · 4861 阅读 · 0 评论 -
数据结构例程——合并有序表
本文针对数据结构基础系列网络课程(2):线性表中第15课时有序表。问题:有两个有序表LA和LB,将它们合并成一个有序表LC。要求不破坏原有表LA和LB 算法思想: 解法1:用有序顺序表实现(支持的算法库,及list.h文件,请点击链接…)#include "list.h"void UnionList(SqList *LA,SqList *LB,SqList *&LC){ int i=原创 2015-09-12 08:27:05 · 4790 阅读 · 1 评论 -
数据结构实践——链表:多项式求和
本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目6 - 多项式求和】 用单链表存储一元多项式,并实现两个多项式的加法。 提示: 1、存储多项式的数据结构 多项式的通式是pn(x)=anxn+an−1xn−1+...+a1x+a0p_n(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0。n次多项式共有n+1项。直观地,可以定义一个数原创 2015-09-12 11:31:31 · 20837 阅读 · 9 评论 -
数据结构中基本运算验证性实践路线建议——以顺序表为例
在数据结构的学习中,掌握基本运算是一个基础性的工作。这种“抽象”级别的成果,适用于各种应用场合,也是训练计算思维的根本依托之一。 在实践性的学习路线中,实践可以分为三个层次:验证性、设计性和综合性。验证性实验是最初步和基本的的,通过验证课堂讲的、书上写的内容,加深对相关知识的理解;设计性实验锻炼的是运用某些基本知识和原理解决问题的能力;而综合性实验则达到综合运用多方面的知识,解决实际问题的目标原创 2015-09-07 07:13:53 · 3765 阅读 · 1 评论 -
数据结构例程——单链表应用举例
本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)//本程序严格讲有个bug,详见1楼#include <stdio.h>#include <malloc.h>#include "linklist.h"void split(LinkList *...原创 2015-09-11 19:59:32 · 6026 阅读 · 6 评论 -
数据结构实践——顺序表应用
【项目 - 顺序表应用】 定义一个采用顺序结构存储的线性表,设计算法完成下面的工作: 1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1); 2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。 提示: (1)充分利用前面建立的算法库解决建立顺序表、输出线性表的问题; (2)为保证复杂度的要求,原创 2015-09-08 06:37:43 · 4380 阅读 · 0 评论 -
数据结构课程的实践方法指导
有不少人说数据结构课程抽象,学习起来感到困难。有些同学放弃了,有些同学拿出了高中学习时练熟的功夫,强行理解,死记硬背,结果辛苦不少,效果不佳,反倒得到很多枯燥的感受。 其实,数据结构课中有不少理论性分析的内容,但对于本科生学习的内容,以及要达到目标,还是以实践性为主的。在学习的方法上做出改变,这门课程就可以展示出生动的实践性味道来。这就要求在学习过程中,将实践学习有效地开展下去,诸多的困境即可原创 2015-08-22 14:46:19 · 5116 阅读 · 1 评论 -
数据结构之自建算法库——顺序表
学习《数据结构》课程的过程中,同步开展实践。对每一种逻辑结构,实现其各种存储结构下的基本运算,是一项基础性的工作。学习方法建议请参考“0207将算法变程序”[视频]部分建议的方法 本文为算法库中的第一个,针对线性表中的顺序存储结构,实现各种基本运算。 算法库包括两个文件: 头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明; 源文件:l原创 2015-09-07 08:11:55 · 7369 阅读 · 10 评论 -
数据结构之自建算法库——链队(链式队列)
本文针对数据结构基础系列网络课程(3):栈和队列中第10课时队列的链式存储结构及其基本运算的实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链队算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:liqueue.h,包含定义链队数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LIQUEUE_H_INCLUDED#de原创 2015-09-15 10:48:59 · 6266 阅读 · 0 评论 -
数据结构例程——迷宫问题(用队列)
数据结构例程——表达式求值(用队列) 本文针对数据结构基础系列网络课程(3):栈和队列中第5课时队列的应用-迷宫问题。例:求出从入口到出口的路径 代码:#include <stdio.h>#define MaxSize 100#define M 8#define N 8int mg[M+2][N+2]={ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,原创 2015-09-15 11:48:52 · 20937 阅读 · 8 评论 -
数据结构实践——初始化顺序表怎么就内存溢出了?
有学生调程序,是要建顺序表。 他的程序是这样的:#include <stdio.h>#include <malloc.h>#define MaxSize 50 //Maxsize将用于后面定义存储空间的大小typedef int ElemType; //ElemType在不同场合可以根据问题的需要确定,在此取简单的inttypedef struct{ ElemType原创 2015-09-14 21:23:29 · 4415 阅读 · 0 评论 -
数据结构之自建算法库——顺序栈
本文针对数据结构基础系列网络课程(2):线性表中第3课时栈的顺序存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。顺序栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:sqstack.h,包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef SQSTACK_H_INCLUDED#defi原创 2015-09-15 09:48:30 · 5037 阅读 · 2 评论 -
"数据结构翻转课堂"答疑实录——概述
【说明】本文是《数据结构》翻转课堂在线答疑的实录,由云班课的“答疑/讨论”功能中导出数据整理而成。第一周的答疑,由于不熟悉平台的缘故,没有做到全部答复。【重要提示】下面的内容,按时间从后往前的顺序提供,请直接到文章末尾,倒着看更顺畅。【课程内容答疑实录】贺利坚2015-09-14 12:17:00 很多还是需要原来的知识,好多都有些忘记了。。。。 就是逐渐积累起来的李宗政2015-09-14 1原创 2015-10-01 15:40:48 · 2756 阅读 · 0 评论 -
"数据结构翻转课堂"答疑实录——顺序表
【说明】本文是《数据结构》翻转课堂在线答疑的实录,由云班课的“答疑/讨论”功能中导出数据整理而成。。【重要提示】下面的内容,按时间从后往前的顺序提供,请直接到文章末尾,倒着看更顺畅。【课程实践答疑实录】焦梦真2015-09-20 11:19:20说 太难了 贺利坚2015-09-20 11:25:48答 练就将军本色之时到了。待回头看,江山本是如此多娇!高露2015-09-19 15:14:5原创 2015-10-01 16:12:56 · 3463 阅读 · 0 评论 -
数据结构例程——表达式求值(用栈结构)
本文针对数据结构基础系列网络课程(3):栈和队列中第5课时栈的应用1-表达式求值。例:用户输入一个包含“+”、“-”、“*”、“/”、正整数和圆括号的合法数学表达式,计算该表达式的运算结果。 解答:#include <stdio.h>#include <stdlib.h>#define MaxOp 100#define MaxSize 100struct //设定运算符优先级{原创 2015-09-15 11:00:31 · 16005 阅读 · 4 评论 -
数据结构之自建算法库——链栈
本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LISTACK_H_INCLUDED#defin原创 2015-09-15 10:08:36 · 4066 阅读 · 3 评论 -
数据结构例程——图的遍历
本文是[数据结构基础系列(7):图]中第6课时[图的遍历]的例程。1、深度优先遍历——DFS(linklist.h是图存储结构的“算法库”中的头文件,详情请单击链接…)#include <stdio.h>#include <malloc.h>#include "graph.h"int visited[MAXV];void DFS(ALGraph *G, int v){ ArcNod原创 2015-11-02 20:29:48 · 3296 阅读 · 1 评论 -
数据结构实践——猴子选大王(数组版)
本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目。【项目1 - 猴子选大王(数组版)】 一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。 要求采用数组作为存储结构完成。[参考解答1]原创 2015-10-18 11:33:26 · 31966 阅读 · 1 评论 -
数据结构例程——迷宫问题(用栈结构)
本文针对数据结构基础系列网络课程(3):栈和队列中第6课时栈的应用2-迷宫问题。例:求出从入口到出口的路径 程序实现:#include <stdio.h>#define MaxSize 100#define M 8#define N 8int mg[M+2][N+2]={ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1},原创 2015-09-15 11:41:22 · 31503 阅读 · 22 评论 -
数据结构例程——用二叉树遍历思想解决问题
本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程。【利用二叉树遍历思想解决问题】(请利用二叉树算法库) 假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测试: (1)计算二叉树节点个数; (2)输出所有叶子节点; (3)求二叉树b的叶子节点个数 (4)设计一个算法Level(b,x,h),返回二叉链b中data值为x的节点的层数。原创 2015-10-19 21:23:24 · 3749 阅读 · 3 评论 -
数据结构例程——二叉树的层次遍历算法
本文是数据结构基础系列(6):树和二叉树中第12课时层次遍历算法的例程。【二叉树的层次遍历算法】 实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 请利用二叉树算法库。[参考解答](btreee.h见算法库)#include <stdio.h>#include "btree.h"void Level原创 2015-10-19 21:40:37 · 16809 阅读 · 6 评论 -
数据结构例程——二叉树遍历的递归算法
本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程。【二叉树遍历的递归算法】 实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 请利用二叉树算法库。[参考解答](btreee.h见算法库)#include <stdio.h>#include "btree.h"vo原创 2015-10-19 20:33:59 · 5407 阅读 · 0 评论 -
数据结构例程——从根节点到每个叶子节点的路径之逆
本文是数据结构基础系列(6):树和二叉树中第11课时二叉树遍历非递归算法和第12课时层次遍历算法的例程。问题:设计算法输出从根节点到每个叶子节点的路径之逆。 解法1:利用二叉树后序遍历非递归算法中,每一个叶子节点出现时,栈中从栈顶到栈底,正好是叶子节点到根节点的逆序的性质编写。[参考解答](btreee.h见算法库)#include <stdio.h>#include "btree.h"void原创 2015-10-19 22:07:20 · 5570 阅读 · 0 评论 -
数据结构例程——线索化二叉树(中序)
本文是数据结构基础系列(6):树和二叉树中第14课时线索二叉树的例程。#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct node{ ElemType data; int ltag,rtag; //增加的线索标记 struct原创 2015-10-20 05:36:43 · 6844 阅读 · 3 评论 -
数据结构例程——哈夫曼树
本文是数据结构基础系列(6):树和二叉树中第15课时哈夫曼树的例程。#include <stdio.h>#include <string.h>#define N 50 //叶子结点数#define M 2*N-1 //树中结点总数//哈夫曼树的节点结构类型typedef struct{ char data; //结点值 double weight;原创 2015-10-20 05:48:16 · 4058 阅读 · 2 评论 -
数据结构例程——以孩子兄弟链存储的树的高度
本文是数据结构基础系列(6):树和二叉树中第5课时树的存储结构的例程。例: 以孩子-兄弟链作为存储结构,求树的高度 源程序:【说明——函数TreeCreate仅创建了如上图所示的图,不具有通用性。】#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct tnode{ ElemType data原创 2015-10-19 15:05:40 · 9716 阅读 · 0 评论 -
数据结构例程——应用图的深度优先遍历思路求解问题
本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]的例程。(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)1、是否有简单路径? 问题:假设图G采用邻接表存储,设计一个算法,判断顶点u到v是否有简单路径。#include <stdio.h>#include <malloc.h>#include "graph.h"int visited[M原创 2015-11-03 21:45:48 · 3790 阅读 · 1 评论 -
数据结构例程——二叉树遍历的非递归算法
本文是数据结构基础系列(6):树和二叉树中第11课时二叉树遍历非递归算法的例程。【二叉树遍历的非递归算法】 实现二叉树的先序、中序、后序遍历的非递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 请利用二叉树算法库。[参考解答](btreee.h见算法库)#include <stdio.h>#include "btree.h"v原创 2015-10-19 21:35:03 · 2930 阅读 · 1 评论 -
数据结构例程——二叉树的构造
本文是数据结构基础系列(6):树和二叉树中第13课时二叉树的构造的例程。1.由先序序列和中序序列构造二叉树定理:任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和先序序列唯一地确定。证明(数学归纳法) 基础:当n=0时,二叉树为空,结论正确。 假设:设节点数小于n的任何二叉树,都可以由其先序序列和中序序列唯一地确定。 归纳:已知某棵二叉树具有n(n>0)个不同节点,其先序序列是a0a原创 2015-10-20 05:29:42 · 8088 阅读 · 0 评论 -
"数据结构翻转课堂"答疑实录——链表
【说明】本文是《数据结构》翻转课堂在线答疑的实录,由云班课的“答疑/讨论”功能中导出数据整理而成。【重要提示】下面的内容,按时间从后往前的顺序提供,请直接到文章末尾,倒着看更顺畅。【知识点答疑】 赵鹤2015-09-21 20:52:03 谢谢老师贺利坚2015-09-21 18:45:32 可是首节点并没有数据域? 先区分下,首节点是第一个数据节点,头节点是标识链表头的专门节点。头节点有数原创 2015-10-05 14:54:08 · 2451 阅读 · 0 评论 -
数据结构应用案例——栈结构用于8皇后问题的回溯求解
【说明】本文来自由周世平老师主编的《C语言程序设计》教材。我作为参编人员执笔了第7、8章。“第8章 问题求解与算法”中“8.6.1 回溯法”以8皇后问题的求解为例,介绍了回溯法的解题过程。这个解决方案中用到了“栈”,引用至此,作为栈应用的例子。需要说明的是,教材面向程序设计初学者,并全文中并未提出过任何关于“栈”的描述。这样做,隐藏了术语,减少初学者的认知难度。对于数据结构的学习者而言,由于知识面的原创 2015-10-05 15:21:37 · 15966 阅读 · 4 评论 -
数据结构实践——负数把正数赶出队列
本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目。【项目 - 进队出队看符号】 设从键盘输入一整数序列a1,a2,…an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,使用算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接写在main函数中即可。当进队出队异常(如队满)时,要原创 2015-10-05 22:21:55 · 3915 阅读 · 0 评论 -
数据结构实践——队列数组
本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目。【项目 - 队列数组】 创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。 要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队原创 2015-10-06 07:13:36 · 3361 阅读 · 1 评论