typedef struct node{ Data_t data; //数据域 Node_t* next; //后继域 }Node_t, *PNode_t;

求解释typedef struct node结构体的作用_百度知道
求解释typedef struct node结构体的作用
*书名*&#47.h& &#47,*L*作者*/ #include &
};/*分类*// / typedef struct node {
struct node * }Node#include &
char name[20];
char classify[20]; #include &quot.h& struct library {
char num[10];*head*/ /
char writer[20];string.h&* 编码 *&#47
成员之一data为 library结构类型
struct node *node的别名叫Node,指针别名叫Link这样定义完之后;
//成员之一next为指向 library结构类型的指针}Node,*L
/&#47typedef struct node /L/定义一个结构:Node anode,就可以这么用了;
&#47,名为node{
*head*/ /&#47
那“Node *p;”这个是解释为指针p指向library的结构类型吗?
其他类似问题
为您推荐:
其他4条回答
网络游戏中通讯的数据结构等、更多交流参考我空间文章:C++编译器,可以存放不同的数据类型1,定义结构体需要、一般C语言编译器环境、结构体,诸如象数据库中的记录,采用结构体就很方便3,但很多C&#47,可以直接写: struct node 2
在C语言中,结构体变量定义的时候是这样的:struct 结构体名 变量名;但是如果把struct 结构体名 定义成一个新类型的话,就可以不用写struct所以本来要struct node*的现在可以写成Node* p甚至Link p (连*都不要了,因为typedef struct node* L
首先你要明白typedef的作用。typedef是C语言里的一个关键字,用来给一个类型别名(化名)。比如typedef&int&size_t;typedef&struct&node&N第一个例子给内置类型int一个别名size_t。第二个例子给struct node一个别名Node。这里你看到了typedef的两个常用情况。第一个例子用以给一个通用类型更具化的别名,这往往会增加你的代码的可读性。第二个例子用以简化代码的繁复性,每当你需要声明一个struct node变量的时候,你可以直接用Node。你的例子typedef&struct&node&{&&struct&library&&&struct&node&*}&Node,&*&L只是一个比较紧凑的写法,等价于如下写法:typedef&struct&node&Node,&*&Lstruct&node&{&&struct&library&&&Link&&&//&Node&*&}注意我把typedef置于结构体node的定义之前(这是一个C成语)。它的好处是C编译器会先看见别名定义,所以在结构体node的定义里面我就已经可以用其别名Link或者Node来声明变量或指针了。你可以把typedef置于结构体node的定义之后,写作struct&node&{&&struct&library&&&struct&node&*&}typedef&struct&node&Node,&*&L但这样你就不能在node的定义里面用定义完才给的别名Node或Link了。所以你看到里面next的声明用的是struct node *。最后,typedef&struct&node&Node,&*&L仍然是一个紧凑的写法,等价于:typedef&struct&node&Ntypedef&struct&node&*&L第一条语句给struct node(结构体node本身)一个别名Node。第二条语句给struct node *(指向node结构体的指针)一个别名Link。
没有使用typedef的声明时使用结构体名,使用了的,就要使用后面定义的名字了,
typedef的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
谭浩强C语言_数据结构11.ppt94页
本文档一共被下载:
次 ,本文档已强制全文免费阅读,若需下载请自行甄别文档质量。
文档加载中...广告还剩秒
需要金币:200 &&
你可能关注的文档:
··········
··········
数据结构 数据结构 数据结构:是一门研究非数值计算的程序设计问题中计算机操作对象以及它们之间的关系和操作等等的学科。 基本概念 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
1.1 线性表以及其应用 1.2 栈、队列 1.3 排序、查找
线性表以及其应用(1) 线性表 分为静态线性表和动态线性表 静态线性表 特征:表中节点的存储是连续的,占用一块连续存储区,一般节点的数量是固定的; 存储表示如下图
数据结构如下图
线性表 顺序存储结构 特定:借助元素在存储器中的相对位置(即,物理位置相邻)来表示数据元素之间的逻辑关系。 缺点:
插入、删除时,需移动大量数据。
一次性分配内存空间。
表的容量难以扩充。
1.1 线性表以及其应用(2) 动态线性表 特征:表中节点的存储是不连续的,一般节点的数量是不固定的; 存储表示如下图
数据结构如下图
链式存储结构 链式存储结构是计算机中的另一种最基本和最主要的数据存储结构。 和顺序存储结构不同, 初始时链式存储结构为空链, 每当有新的数据元素需要存储时用户向系统动态申请所需的存储空间插入链中。
链式存储结构 每个结点有两个域,其中存储数据元素信息的域称为整数域;存储直接后继存储位置的域称为指针域。 struct N struct Node *N ;
typedef struct Node Node_t;
链式存储结构存储线性结构数据元素集合的方法是用结 点(Node)构造链。 线性结构数据元素的特点
正在加载中,请稍后...随笔分类 - Data Structure
摘要: 题目:输入两棵二叉树A和B,判断树B是不是A的子结构bool IsChildTree(Node * father, Node * son){ if(father == NULL && son == NULL) if(father == NULL && son != NULL) if(father != NULL && son == NULL) //如果当前结点相同,判断左右子树是否子结构 if(father-&data == son-&...
阿凡卢 阅读(800) |
摘要: 链表:1、注意是否有带头结点。2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历。一、判断两个链表是否相交:(假设两个链表都没有环)1、判断第一个链表的每个节点是否在第二个链表中 2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3、如果两个链表有一个公共结点,那么该公共结点之后的所有结点都是重合的,那么,它们的最后一个结点必然是重合的。先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后
阿凡卢 阅读(1012) |
摘要: BST即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B-树(B树)是一种多路搜索树(并不是二叉的):1.定义任意非叶子结点最多只有M个儿子;且M&2;2.根结点的儿子数为[2, M];3.除根结点以外的非叶子结点的儿子数为[M/2, M];4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)5.非叶子结点的关键字个数=指向儿子的指针个数-1;6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] &lt
阿凡卢 阅读(428) |
摘要: Trie—单词查找树Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。性质:1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。优点:1.查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间;而BST需要O(m log n)的时间。2.当存储大量字符串时,Trie耗费的空间较少。因为键值并非显式存储的,而是与其他键值共享子串。操作:1.初始化或清空:遍历Trie,删除所有节点,只保留根节点。2.插
阿凡卢 阅读(2589) |
摘要: hashmap的C++实现按照hashmap的基本原理用C++实现了简单的基本功能,复杂的实现参考C++库的源码,C++最新的标准库里已经有以下四种基于hashtable的容器:unordered_set (C++11) unordered_multiset (C++11) unordered_map (C++11) unordered_multimap (C++11)。具体参考:/w//* * HashMap.h * Author: luxiaoxun */#ifndef HASHMAP_H_#define HASHMAP_H_#inclu
阿凡卢 阅读(10057) |
摘要: hashtable的C++实现,使用两种常用的解决冲突的方式,使用时需要自己提供针对HashedObj的hash函数。1、分离连接法(separate chaining)#include &vector&#include &list&template &typename HashedObj&class HashTable{ public: explicit HashTable(int size = 101); void makeEmpty() { for(int i = 0; i & theLists.size(
阿凡卢 阅读(5101) |
摘要: 1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。...
阿凡卢 阅读(2403) |
摘要: 1.DFS(深度优先搜索)深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节...
阿凡卢 阅读(12288) |
摘要: 1、后序表达式求值:后续表达式(逆波兰式)的特点:没有括号。求值方法:从前向后扫,遇到操作数压栈;遇到操作符,从栈中取出2个操作数运算,结果压栈。最终栈中所剩的数为结果。2、中序表达式求值我们先来定义运算符的优先级:(+,-*,/,%从上到下依次升高准备2个栈,一个专门存放运算符,另一个专门存放操作数。1.遇到),那么退栈计算到(为止.结果压栈。2.遇到运算数.那么压栈。3.如果当前运算符优先级低于栈顶运算符.那么计算栈顶运算符并将结果压栈.4.否则压栈.计算带括号和浮点数的表达式:View Code #include&iostream& #include&stack&
阿凡卢 阅读(3360) |
摘要: 1.判断二叉树是否平衡//求树的高度int TreeDepth(Node* t){ int hl,hr,h; if(t != NULL) { hl = TreeDepth(t-&left); hr = TreeDepth(t-&right); h = hl&hr? hl: return h+1; } return 0;}//判断二叉树是否平衡int isBalanced(Node* t) { if(t==NULL) return 1; int leftDepth = TreeDepth...
阿凡卢 阅读(3517) |
摘要: 二叉树的基本操作,都使用递归://二叉树 class Node { public: Node * Node * Node():data(' '),left(NULL),right(NULL){} Node(char ch):data(ch),left(NULL),right(NULL){} }; //广义表建立二叉树,输入:A(B(D,E(G,)),C(,F))* void CreateBinTree(Node* & Root,char *str) { stack&...
阿凡卢 阅读(573) |
摘要: 题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。分析:这是google的一道面试题。看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。乍一看这样思路挺好的。但仔细一想,该思路存在一个重要的问题:如果当前最小元素被pop出去,如何才能得到下
阿凡卢 阅读(526) |
摘要: //优先级队列实现的哈夫曼树的编码和译码 #include&iostream& #include&queue& #include&string& class Node { public: Node* Node* Node(float w,Node* l=NULL,Node* r=NULL,char c=' '):weight(w),ch(c...
阿凡卢 阅读(511) |
摘要: 单向循环链表:空表:L-&next = L。与单链表的联系:判断表尾的方法不同:单链表用p==NULL;循环链表用p==L。双向循环链表:一个结点包含指向后继(next) 和指向前驱(prior) 两个指针,两个方向又分别构成循环链表。双向循环链表的插入和删除:1.p之后插入ss-&next = p-&p-&next =s-&prior =s-&next-&prior =2.p之前插入ss-&prior= p-&p-&prior =s-&next =s-&prior-&g
阿凡卢 阅读(176) |
摘要: 链表:1、注意是否有带头结点。2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。3、单链表的插入、删除操作需要寻找前驱结点。单链表的建立、排序和翻转,都是针对有头结点的单链表。#include &iostream&typedef struct Node{ Node *}Node,*L//顺序建表:尾插法void CreateLinkList(List& L, int n){ // 建立空表 L = (List)malloc(sizeof(Node)); L-&next = N...
阿凡卢 阅读(506) |typedef struct aa { struct aa * } NODE; 什么意思_百度知道
typedef struct aa { struct aa * } NODE; 什么意思
h&int fun (NODE *h){ int sum=0;
p=p-&data=rand()%16;为什么得:\/););}NODE *creatlink(int n){
NODE *h;next=p-&什么意思; p-&#include &\typedef struct aa{ int data,结构体内部指针;next=s;/}outlink(NODE *h)
p=h-&data);
//&#47.h&这个函数是干啥的 { NODE
*p;怎么来的
while(p;-&stdio,p-&#include &
int i,sum),*p;
/data%2==0)
sum+=p-&\\n;n The LIST ;n HEAD&
p=h-&这里整段看不懂 s-&n&#92,*s;
h=p=(NODE*)malloc(sizeof(NODE));
struct aa */;
outlink(head);i++)
{ s=(NODE*)malloc(sizeof(NODE));
&#47!=NULL)
p-&gt.h&nSUM=%d&
printf(&);n\n&i&CLS&%d&quot?
head=creatlink(10);
sum=fun(head);next=NULL;
system(& p=p-&}void main(){ NODE *head?有什么用} NODE;;
{ printf(& s-&gt#include &lt
提问者采纳
则是声明了一个struct aa *型的结构体指针p。在以后的代码中就可以用这个别名来声明该结构体类型的变量了创建一个名为aa的结构体类型,NODE *p。当然写成后者也是正确的,并由开头的typedef和最后的NODE配合为这个结构体起一外别名叫NODE。如;了,有一个int型成员变量和一个自身类型的指针变量,而不必写成struct aa x:NODE则是声明一个struct aa型结构体变量x;和struct aa *p
提问者评价
其他类似问题
为您推荐:
typedef的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁已知有一个单向循环链表,其每个结点中含三个域:prior,data 和next,其中data为数据域,next为指向后继结点指针域,pre也为指针域,但它的值为空(NULL),试编写算法将此单向循环链表改为双向循环链表,即使pre成为指向前驱结点的指针域.
雪少MZab32
Node* list( Node* head ) { node *p,*q; p = q = NULL; while( p != NULL ) //一边遍历,一边加前向指针 { p->prior = //关键句q=p; p = p-> }
//返回双向链表的尾结点 } 有点不好理解,画图试试,一下就明白了.
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 struct node 的文章

 

随机推荐