#include <stdio.h> #include <stdlib.h> #include <string.h> typedef enum{ATOM, LIST}ElemType; typedef struct GLNode{ ElemType tag; union{ char atom; struct{ struct GLNode *hp,*tp; }htp; }atom_htp; }GLNode; char s[1000]; void Process(char…
广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同.而广义表是允许线性表容纳自身结构的数据结构. 广义表定义: 广义表是由n个元素组成的序列:LS = (a1,a2, ... an);其中 ai是一个原子项或者是一个广义表.n是广义表的长度.若ai是广义表,则称为LS的子表. 广义表表头和表尾:  若广义表LS不空,则a1,称为LS的表头,其余元素组成的子表称为表尾. 广义表的长度: 若广义表不空,则广义表所包含的元素的个数,叫广义表的长…
K阶斐波那契数列--------西工大NOJ习题.10 原创不易,转载请说明出处!!! 科普:k阶斐波那契数列的0到n-1项需要有初始值. 其中,0到n-2项初始化为0,第n-1项初始化为1. 在这道题目中,所引用的函数详见:数据结构实现--循环队列 (我的一篇博文) 我使用的方法是尺取法,这样可以大大地减小时间复杂度. 具体见代码: #include <stdio.h> #include <stdlib.h> typedef int Elem; typedef struct Qu…
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct _Queue { int max_size; int rear; int lenth; int* data; }Queue; Queue* Create(int n) { Queue* Q = (Queue*)malloc(sizeof(Queue)); Q->data = (int*)calloc(n,…
二叉排序树的合并有三种方法 先存入数组,然后..... 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN) 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低. 第三种我写了一下,是错误的答案,实在想不出更好的方法. 网上还有按照方法1进行... 方法二可能更加正常一点,虽然时间复杂度比方法一大... 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef stru…
题解 这道题目说的很诡异,其实没有什么把括号补上....仅仅是先序读入,然后中序输出就行了 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode { char data; struct TreeNode *LChild, *RChild; }TreeNode; char *c; void Create(TreeNode **T) { if(*c=='#'…
需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode { char data; struct TreeNode* LChild, *RChild; }TreeNode; void Create(TreeNode** T, char *s1, int l…
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode { char data; struct TreeNode *LChild, *RChild; }TreeNode; void Create(TreeNode **T, char *s, int len) { if(len==1) { (*T) = (TreeNode*)malloc(sizeof(TreeN…
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Node { int row, col; ElemType data; struct Node* right, * down; }Node; typedef struct CrossLink { Node* row_head;//注意:这是头结点数组 Node* col…
目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ArcNode{ int to; struct ArcNode *next; int w; }ArcNode; typedef struct VertexNode { int data; ArcNode *arc; }VertexNode; typedef struct Graph { int max; V…
​ 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ArcNode{ int to; struct ArcNode *next; int w; }ArcNode; typedef struct VertexNode { int data; ArcNode *arc; }VertexNode; typedef struct Graph { int max; Ve…
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Triple { int i; int j; int e; }Triple; typedef struct _Matrix { Triple* data; int* i_pos; int m, n, size, max_size; }Matrix; void…
一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一是使其可视化,而是验证算法5.6.花了不少功夫才写出来(强烈建议自己动手写一写),最后是借助树形结构的角度才找到一个不错的解决办法.按照<数据结构编程实验>的分类,数据结构无非线性结构.树状结构.图结构,可以说树是特殊的图(图的最小生成树),线性表示特殊的树.....扯远了! 二.头文件 补充版字…
原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an) LS是广义表的名称,n是它的长度,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表.习惯上,用大写字母表示广义表的名称,小写字母表示原子.当广义表LS非空时,称第一个元素a1为LS的表头,称其余元素组成的表(a2, a3, ..., an)是LS的表尾. 下面列举一些广义表的例…
1. 广义表的定义     每个元素可以为Atom,原子,也可以为线性表.      线性表的推广.线性表元素有唯一的前驱和后继,为线性表,而广义表是多层次的线性表      表头:第一个元素,可能是原子,可能是广义表      表尾:除了第一个元素,剩余的元素,所构成的广义表     举例:         A = (a,b,(c,d),e)          head(A)  = a         tail(A) = (b,(c,d),e)     遍历操作:     取表头,取表尾 ,取…
//广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #define MAXSTRLEN 40 ) typedef char SString[MAXSTRLEN+1]; typedef char AtomType; // 定义原子类型为字符型 typedef enum{ ATOM, LIST // ATOM==0:原…
// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string.h> #include <stdio.h> using namespace std; typedef char ElemType; struct GLNode{ bool tag; //标志位 union{ //值域或子表的表头指针域 ElemType data; GLNo…
任何一个算法的设计取决于选定的数据结构,而算法的实现依赖于采用的存储结构. 之前线性表的数据元素都是非结构的原子类型,元素的值是不可再分的.下面学习的这两个线性表是很特殊的,其中数据元素本身也可能是一种数据结构. 认识数组和广义表 数组可以看成是一种特殊的线性表,也就是线性表中的数据元素本身也是一个线性表,数组中的个元素具有统一的类型.其实说白了就是在脑海中想数组中的数据如何在内存中以什么形式的线性表来存储.在C语言中,一个二维数组可以定义为其分量类型为一维数组类型的一维数组类型. 数组一旦被建…
补充:C语言中常用的串运算 调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from)串连接,strcat(char to,char from) 求串长,strlen(char s) 4.1  串 串(String)----零个或多个字符组成的有限序列 串的存储结构:顺序存储.链式存储 顺序存储表示 typedef struct{ char *ch; //若串非空,则按串长分配存储区,…
广义表的简单理解在这篇博文中:https://blog.csdn.net/lishanleilixin/article/details/87364496,在此不做赘述. Java实现广义表: package 广义表; import java.util.Stack; public class Test { public final int TAG_TABLE = 1; public final int TAG_ITEM = 0; private char mStartSymb = '('; pri…
广义表是非线性结构,其定义是递归的. 以下给出几种简单的广义表模型: 由上图我们可以看到,广义表的节点类型无非head.value.sub三种,这里设置枚举类型,利用枚举变量来记录每个节点的类型: enum Type { HEAD, //头节点 VALUE, //值节点 SUB, //子表节点 }; 每个节点都有自己的类型以及next指针,除此之外,如果该节点是VALUE类型还要分配空间存储该节点的有效值:但是若该节点是SUB类型,就需定义一个指针指向子表的头. 这里我们可以用联合来解决这个问题…
6-7 求二叉树的深度 (6 分)   本题要求实现一个函数,可返回二叉树的深度. 函数接口定义: int Depth(BiTree T); T是二叉树树根指针,函数Depth返回二叉树的深度,若树为空,返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild,…
head:取非空广义表的第一个元素 tail:取非空广义表除第一个元素外剩余元素构成的广义表 L=((x,y,z),a,(u,t,w)) head(L)为(x,y,z) head(head(L))为x,是单个元素 tail(head(L))为(y,z),是剩下元素构成的广义表.…
求Cantor表 题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入描述 Input Description 整数N(1≤N≤10000000) 输出描述 Output…
题意:给一棵二叉树,求其深度. 思路:递归比较简洁,先求左子树深度,再求右子树深度,比较其结果,返回:max_one+1. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution {…
广义表 列表里面有列表,比如(1,(2,(3,4)),5) 用链表可以实现 结果如图 guangyibiao.h #ifndef __GUANGYIBIAO__ #define __GUANGYIBIAO__ #include <stdio.h> #include <string.h> #include <memory.h> #include <malloc.h> #include <assert.h> #include <stdbool.…
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *left; struct TreeNode *right; }TreeNode; 2.创建根节点: TreeNode *creatRoot(){ TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); if(NULL==root){ printf("…
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历. Output 输出二叉树的深度. Sample Inp…
树型结构是一类重要的非线性数据结构,树是以分支关系定义的层次结构,是n(n>=0)个结点的有限集.关于树的基本概念不再作过多陈述,相信大家都有了解,如有遗忘,可翻书或去其他网页浏览以温习. 树中结点的最大层次数称为树的深度(Depth)或高度. 本文中以二叉树为例来讲述求树的深度的算法. 在算法开始之前,我们要有数据,即一棵树,树又是结点的集合.所以,应该先定义结点的数据结构(结点的基本属性和操作),然后再定义树的数据结构(树的基本属性和操作).本文的重点不是讲如何去创建树的数据结构,所以一切从…
广义表,又称为列表.记作: LS = (a1,a2,…,an) ;( LS 为广义表的名称, an 表示广义表中的数据). 广义表可以看作是线性表的推广.两者区别是:线性表中的数据元素只能表示单个数据元素:广义表中的单个数据元素 ai ,既可以是单个元素,也可以是广义表. 原子和子表 在广义表中,单个元素被称为 “原子”:包含的广义表被称为 “子表”. 例如: A = ()  :A 表示一个广义表,只不过表是空的,广义表 A 的长度为 0. B = (e)  :广义表 B 中只有一个原子 e ,…