链表的定义中,struct Node和Node的区别(在线等,急!!) 20C

typedef struct Node{...}LNode;
以上定义中,是不是可以去掉第一个Node?然后依然可以得到新类型LNode

typedef struct Node* Linklist;
以上定义中,既然已经自定义了LNode类型,为什么不这样写:typedef LNode* Linklist;
而还要用 struct Node呢?

1

7个回答

struct //是C中的结构体的关键词。
如: stuct node{

/* node 相当于结构体的类型,关键是!
其实在C中stuct node 才相当于一个数据类型,如int ,所以在才会给初学者的带来困难,如在定一个变量时,要用 struct node xxx,而不是 node xxx 这就是关键。
*/
int a;
.....
} a; //

a是结构体的变量

而 typedef // 是自定义数据类型。
如:typedef int zengshu // 把一个数据类型用一个直观的数据类型名代替,增加程序的可移植性。
而且 typedef struct node {

}A;
则是把 struct node 看做一个数据类型(见关键处),不同的是这个结构体类型的定义也放在后面。 而A则是那个直观的数据类型名,引用的时候更加方便。

1

第一个问题:可以,如果去掉typedef 就可以
第二个问题:可以这样写. 我测试的代码:可以通过
#include
#include
typedef struct
{
int a;
float b;
}aaa;

typedef aaa* bb;

int _tmain(int argc, _TCHAR* argv[])
{

bb c=(bb)malloc(sizeof(aaa));
c->a =4;
printf("%d\n",c->a);
free(c);
return 0;

}
而且可以直接typedef struct Node{...}LNode,* Linklist ; 然后Linklist就是指针结构了.

0

typedef已经将 struct Node{...} 定义为了 LNode,因此可以直接用LNode* Linklist 定义结构体指针,相当于 struct Node * Linklist

0

#include "malloc.h "
#include "stdio.h"
这2个没显示出来,可能是csdn过滤了尖角号,换成""也可以

0

struct Node{

  int a[10];

  int length;

}


int  main(){

  Node* a;

 initNode(a);

  return 0;

}

错误方法:

   void initNode(Node *a){

     a = (Node*)malloc(sizeof(Node));

      a->lenght=0;

}

它不会改变main函数中的a原因是main中传入的是地址给initNode方法中的a而a第一句是重新申请个地址,所以它的地址不是原来的。它已经脱离了main中a它的改变对main中那个变量没有一点影响

正确的方法:

 void initNode(Node* &a){

  a = (Node*)malloc(sizeof(Node));

   a->lenght=0;

}

它的含义就是把main中那个指针变量等价与initNode中的这个指针变量。它们为同一个指针。为什么了,我想是它传入的是存储指针的地址而不是指针指向地址。为了理解就认为它就把自己传入。

另外有个误区对与数组int a[10];我们不能这样

 void initArray(int a[]){

a = {1,2,3,4,5,6,7};

}

a在是数组的首地址,它是个常量你这要做的意思是把a的地址又改变了,常量怎么可以改变了。。。。就如1不能为2

0
  1. LNode相当于结构体Node的别名,当然也可以将Node去掉,写成:typedef struct {...}LNode,并且完全可以写成typedef LNode* Linklist;的形式。
  2. 但是在代码设计中变量命名的统一也很重要,你后面定义的各种结构体名称如LNode 或者 LinkList理论上都属于一个链表的一个节点(Node),所以Node结构体的定义就尤为重要了。所以为了代码的统一和代码的可读性,可以理解为如下形式: typedef struct Node{...}; typedef struct Node* LNode; typedef struct Node* Linklist;
0

typedef struct Node{...}LNode;
以上定义中,是不是可以去掉第一个Node?然后依然可以得到新类型LNode
这个Node是可以去掉的,前提是你在结构体内部不使用struct Node类型定义其他变量。

typedef struct Node* Linklist;
以上定义中,既然已经自定义了LNode类型,为什么不这样写:typedef LNode* Linklist;
而还要用 struct Node呢?
可以写成typedef LNode* Linklist;
测试代码如下

int main()
{
    typedef struct 
    {
        int a;
    }LNode;
    LNode b;
    typedef LNode* link;
    link c = &b;
    c->a = 10;
    printf("%d \n",c->a);
}

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
链表代码text文档
链表 代码 ,改为.cpp可直接运行 #include <iostream> using namespace std; /****** 定义链表抽象数据类型 ******/ typedef int VALUE_TYPE; //定义节点数据域类型 //定义节点类型 typedef struct Node { VALUE_TYPE data; //数据域 struct Node *next; //指针域 } Node,*LINK_LIST;
【Data Struct】单链表
单链表的创建#include<stdio.h> #include<stdlib.h>typedef struct node { int data; struct node * next; }LNode, *LinkList; // LNode是节点结构体,LinkList是节点结构体指针LinkList create_list() { LinkList head; h
数据结构 链表 多项式相加 C语言
数据结构 链表 多项式相加 C语言 struct node { int coef; int expo; struct node *next; }; void input(struct node **head) void display(struct node *head) void add(struct node **head1,struct node *head2)
长正整数相减(数据结构-循环链表)
测试过了,绝对好用,大家顶一下 以下是部分.h代码 typedef struct node { int data; struct node *next; }NODE; //定义链表结构 NODE *inputint(void){ //输入超长整数,存入链表 } NODE *insert_after(NODE *u,int num){ //在u结点后插入一个新的NODE,其值为num } int compare(NODE *p,NODE *q){ //比较两个数的大小 } NODE *subint(NODE *p,NODE *q){ //完成两个链表减法操作返回指向|*p-*q|结果的指针 } void printint(NODE *s){ //打印链表 }
浅析 typedef struct 和 struct在定义结构体和链表中的作用
       因为我是从C++入门的,对于C语言中很多知识不是很了解,所以经常会遇到在C++中没见过的表达形式,在这里记录一下学习历程,同时也希望能够帮助到后来者。关于typedef struct 和 struct 的区分网上有很多,但是都说得错综复杂,感觉没有get到正确的点。通过资料的整理,我认为它们之间的区分只需要记住下面几点即可: typedef是C语言中的关键字,作用是为一种数据类型定...
蛮力法求最近对
c语言蛮力法求解最近对问题 //蛮力法 --最近对问题 #include<stdio.h> #include<stdlib.h> #define random(x) (rand()%x) typedef struct node//定义点的结构 { int x; int y; }node; typedef struct nlist//定义点的一个集合链表存储 { struct node data; struct nlist *next; }nlist; typedef struct close//用于保留最近的两点 { node a; node b; double space; }close;
数据结构C语言版二叉树遍历
typedef struct Node {char data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; /*定义树*/ typedef struct {BiTree elem[Maxsize]; int top; }SeqStack;/*定义栈*/
实现链表的基本操作。
3-1 设链表的存储结构如下: typedef struct Node { Type data; //数据域;Type: 用户定义数据类型 struct Node *next; //指针域 } Node, *LinkList; 实现链表的基本操作。
通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail
void init_node(node *tail,char *init_array) 这样声明函数是不正确的,函数的原意是通过数组初始化链表若链表结点传入的是指针,则并不能创建链表,除非是二维指针即指向指针的指针,或者是指向指针的引用 因为传入的虽然是指针,但是对形参的操作并不能影响实参,函数内修改的是实参的副本。要想在函数内部修改输入参数,要么传入的是实参的引用,要么传入的是实参的地址
c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
(来自百度解答) Node *p是定义一个Node结构体指针,指针名为p,指向一个Node结构体,并为这个结构体分配了内存空间 该结构体无命名 Node p是定义一个Node结构体,结构体名为p。 追问:那两个的用法有什么区别???在内存中分别是怎么存储的??? 回答: 结构体指针本质上是指向一个结构体 使用如下例 struct Node{i
简单的单向链表的创建(总结)
简单的单项链表的创建过程以及注意点(由主函数进入): #include #include struct node        //定义一个结构体类型,里面有值域和指针域。单项链表中指针域只保存了下一个结
编程复习4链表移动
编写一个函数,将给定的带有头结点的单向链表的前m个节点移到链尾。     结构的定义: struct node {  int num;              struct node *next; } 函数的原型:struct node *monenode( struct node *head,int m ), 其中:参数head 是单向链表的头指针;参数m 是要移动的节点数。函数的
C语言中Node * a,和Node* &a的区别
*和*&之间的用法
C++ 非递归二叉树创建
非递归实现C++二叉树 Node* creatTree(struct Node *head) void preOrderUnrec(struct Node *head) void inOrderUnrec(struct Node *head) void postOrderUnrec(struct Node *head)
迷宫求解 数据结构 链表 c++编写
用链表解决迷宫求解问题 typedef struct { int arrive; int treat; }QNode; typedef struct node { QNode data; struct node *next; }LNode; LNode *front,*rear; QNode curr,temp;
数据结构约色夫程序代码
#include<stdio.h> #include<string.h> #include<stdlib.h> struct node{ int data1; /*weishu*/ int data2; /*mima*/ struct node *next; }; void main() { int n,i,b,m,j; struct node *l=(struct node *)malloc(sizeof(struct node)); /*定义一个空结点*/ struct node *p,*q; printf("shu ru zong ge shu n:"); scanf("%d",&n); /*测试个数*/ q=l;
List (单链表17个函数讲解)
链表时一种常用的数据结构,是通过“链”来建立起数据元素之间的逻辑关系,这种用链接方式储存的线性表简称链表(Link List)。一,链表与顺序表的对比 在接触链表之前大家想必已经了解过了顺序表的储存结构方式,顺序表与链表的不同之处如下: 1.顺序表是物理位置上相邻来表示数据元素之间的逻辑关系;但链表不是,物理地址不相连,通过指针来链接。 2.顺序表储存密度高,且能够随机的存取数据(
关于如何理解链表结构体指针引用LinkNode * &L的问题
简单就是把垂涎三尺
冒泡排序~链表
#include&amp;lt;stdio.h&amp;gt;typedef struct node{    int data;    struct node *next;} linknode,*link;link creatLink(link head)          //创建链表{    link p,r;    int x;    r=head;    scanf(&quot;%d&quot;,&amp;amp;x);    wh...
单链表的建立初始化插入删除
在VC下能运行得到结果typedef struct NODE { int date; struct NODE *next; }node;
C语言数据结构 约瑟夫
typedef struct Node { int data; int data2; struct Node *next; }Node,Linklist;
链表的定义以及结构体,指针相关小结
严蔚敏版的数据结构里面关于单链表的存储结构定义如下 typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; 《数据结构与算法分析》中关于单链表的存储结构定义如下 struct Node; typedef struct Node *PtrToNode; typedef PtrToNod
实验项目 2-12:两个有序链表序列的交集
2-12. 两个有序链表序列的交集(20) 时间限制 400 ms 内存限制 64000 kB 代码长度限制 8000 B 判题程序 Standard 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。 输入格式说明: 输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1
C++操作单链表ListNode
C++操作单链表ListNode 通过C++进行单链表的创建、打印以及利用栈实现逆序打印。 单链表的创建和打印 #include &amp;amp;amp;lt;iostream&amp;amp;amp;gt; using namespace std; //定义结构体 struct ListNode{ int val; ListNode* next; }; class operateList { public: /*创建单链表*/ ...
【数据结构java描述(一)】单链表类的create()方法的重写以及Node类的理解
首先我们需要知道线性表的链式结构的设计思路: 先构造结点类,然后基于结点,设计链式结构类。 Java源码中结点类Node.Java: package com.study.test; publicclass Node { Object data; Node next; Node() { this(null,null); } Node
链表所有操作
struct Info { string name; //姓名 int id; //学号 }; //链表定义 struct Node { Info val; Node *next; Node(Info x) :val(x), next(NULL) {} }; class LinkList { public: //构造函数 LinkList(); //在链表头部插入结点 void InsertHead(Info val); //插入结点 void Insert(Info val, int pos); //删除结点 void Remove(Info val); //得到链表长度 int Length(); //链表反序 void Reverse(); //查找结点位置 int Find(Info val); //打印链表 void Print(); //析构函数 ~LinkList(); private: Node *head; int length; };
11-7 奇数值结点链表
奇数值结点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。 链表结点定义: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNod...
(三)从解析DTS到创建device_从device_node到并入设备驱动模型(结合源码)
从device_node到并入设备驱动模型 此篇博客有很多参考其他文章的内容,由于参考内容繁杂,不一一标注角标了,在末尾会贴上所有参考博客的link,如有侵权,请联系本人处理,谢谢。 深入,并且广泛 -沉默犀牛 上一篇文章已经详细的分析了两个问题: 1.如何根据Device Tree的信息,找到最适合的machine_desc 2.如何将DTB转换成节点是device_node的树状...
Linked List Cycle II:判断链表有环并找出最开始的循环位置
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Note: Do not modify the linked list.Follow up:Can you solve it without using extra space?下文转载自:http://www...
java实现单链表的添加和插入;评论中设定一个node类节点操作
package com.kane.test; class  Mylist{ private int data; private Mylist next;//设定指向下一个的指针 public Mylist(int x){//为了链表传值 data=x; } /**  * 插入  * @param x  */ public void add(Mylist x) { x
静态链表 StaticList
静态链表
关于C++ 里struct 和 class的区别
在分析android EventHub类时发现内嵌入一个Device结构体,在使用上和class类似。 虽然之前认为struct和class类似,但是不知道能当成class一样使用,哎,C++ 语言基础的东西都不会。 下面这篇博文写得不错。 博客原文地址:http://blog.sina.com.cn/s/blog_673ab5410100zzlf.html 有很多人在学习C++的时候只是
二叉树(数据结构)可执行
内部代码预览: #include"stdio.h" #include <stdlib.h> //定义二叉树结构 typedef struct Node { char data; struct Node *Lchild; struct Node *Rchild; }BitNode,*Bitree; //初始化为一棵空树 void InitTree(Bitree root) { root=NULL; }
c优先调度算法代码
实现了os中优先调度的算法 typedef struct node { char name; int Y;//优先数 int time;//要求运行时间 char Z;//状态 struct node *next; }node,*list;
数据结构链表
数据结构各种链表的实现和建立。#include <iostream.h> #include <conio.h> typedef char datatype; typedef struct NODE * pointer; struct NODE { datatype data; pointer next; }; typedef pointer lklist; lklist initlist() {//初始化 pointer head; head=new NODE; head->next=NULL; return head; }
链表公共结点
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; typedef struct LNode{ int data ; struct LNode *next ; }LNode , *LinkList; LinkList Createlist( LinkList L){ int num ; LNode *p , *...
双链表基本操作的实现
#include typedef int ElemType; typedef struct DNode{ ElemType data; struct DNode *prior,*next; }DNode, *DLinkList; //初始化链表,尾插法创建一个双链表 void CreatList(DLinkList *L){ int x; (*L) = (DL
数据结构C语言版约瑟夫环
采用线性链表编写的约瑟夫环,C语言版 typedef struct Node {int no; int secert; struct Node *next; }Node, *LinkList;
c++ 单链表基本操作
#include #include #include #include #include /*c++实现简单的单链表操作*/ using namespace std; typedef struct student { int data; struct student *next; }node; //建立单链表 node *creat() { n
02-线性结构1 两个有序链表序列的合并 (15分) (单向链表)
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习node区块链 区块链开发教程node