链表的定义中,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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
浅析 typedef struct 和 struct在定义结构体和链表中的作用
       因为我是从C++入门的,对于C语言中很多知识不是很了解,所以经常会遇到在C++中没见过的表达形式,在这里记录一下学习历程,同时也希望能够帮助到后来者。关于typedef struct 和 struct 的区分网上有很多,但是都说得错综复杂,感觉没有get到正确的点。通过资料的整理,我认为它们之间的区分只需要记住下面几点即可:nntypedef是C语言中的关键字,作用是为一种数据类型定...
链表代码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>n#include<stdlib.h>typedef struct noden{n int data;n struct node * next;n}LNode, *LinkList;n// LNode是节点结构体,LinkList是节点结构体指针LinkList create_list()n{n LinkList head;n 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){ //打印链表 }
蛮力法求最近对
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,*LinkList区别
文章参考:https://blog.csdn.net/qq_43244452/article/details/82824600n定义链表节点,nntypedef struct NODEn{nint data;nstruct Node *next;n}Node,*LinkList;n其中Node P完全等价与LinkList P;n代码:可以尝试使用Node替换LinkList。n1 #includ...
简单的单向链表的创建(总结)
简单的单项链表的创建过程以及注意点(由主函数进入):nn#include nn#include nnnnnstruct node        //定义一个结构体类型,里面有值域和指针域。单项链表中指针域只保存了下一个结
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)。一,链表与顺序表的对比 n 在接触链表之前大家想必已经了解过了顺序表的储存结构方式,顺序表与链表的不同之处如下: n 1.顺序表是物理位置上相邻来表示数据元素之间的逻辑关系;但链表不是,物理地址不相连,通过指针来链接。 n 2.顺序表储存密度高,且能够随机的存取数据(
图(graph)
图由结点的有穷集合V(vertex)和边的集合E(edge)组成。为与树形 结构进行区别,在图结构仲裁杭长将结点称为顶点,边 时顶点的有序偶对。若两个顶点之间存在一条边, 则表示这两个顶点具有相邻关系。nn有向完全图和无向完全图nn若有向图中有n个顶点,则最多有n(n-1)条边,(将具有n(n-1)条边的有向图称为有向完全图)。若无向图中有n个顶点,则最多有n(n-1)/2条边,(将具有n(n-1...
关于如何理解链表结构体指针引用LinkNode * &L的问题
简单就是把垂涎三尺
链表小结
链表基本操作nnnn单链表存储结构nnnnstruct LNoden{n LNode* next;n int data;//可以是任何类型的数据n};nstruct LinkListn{nprivate:n LNode* head;n //int length;可以存储表长,但是在这里为了淡化链表中位置概念,所以这里不进行表长的操作npublic:n LinkList...
冒泡排序~链表
#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语言中Node * a,和Node* &a的区别
*和*&之间的用法
C语言数据结构 约瑟夫
typedef struct Node { int data; int data2; struct Node *next; }Node,Linklist;
c++实现链表归并排序
一. 定义节点struct node { int data;n node* next; node(int data = 0, node* next = NULL) n :data(data), next(next) {}n};二. 归并排序主体结构void mergesort(node*& head) {n if(head->next) {n node* mid = cut(head
链表所有操作
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; };
头插法创建单链表
头插法创建单链表(C)(25分)nn本题要求实现两个函数,输入n个数据,采用头插法创建单链表并打印。例如:如果输入4 ,再输入3 7 9 5,则应打印输出5 9 7 3。nn链表结点结构定义:nnnstruct Node { //链表结点n int data; //数据n struct Node* link; //指向下一个结点的指针n};nnn函数接口定义:nn...
11-7 奇数值结点链表
奇数值结点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。nn链表结点定义:nnnstruct ListNode {n int data;n struct ListNode *next;n};nn函数接口定义:nnnstruct ListNode *readlist();nstruct ListNod...
02-线性结构1 两个有序链表序列的合并
02-线性结构1 两个有序链表序列的合并   (15分)rnrnrnrn本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。rnrn函数接口定义:rnList Merge( List L1, List L2 );nrnrn其中List结构定义如下:rntypedef struct Node *PtrToNode;nstruct Node {n ElementType
面试12之给定两个链表ListNode* A,ListNode* B,请返回A+B的结果
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。n给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。n测试样例:n{1,2,3},{3,2,1}n返回:{4,4,4}nnn本题的思路很简单,按照小学数学中学习的加法原理从末尾到首位,对每一位
二叉树(数据结构)可执行
内部代码预览: #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; }
c++笔记struct和typedef struct彻底明白了
c++笔记struct和typedef struct彻底明白了
链表公共结点
n#include &amp;lt;stdio.h&amp;gt;n#include &amp;lt;stdlib.h&amp;gt;nntypedef struct LNode{n int data ;n struct LNode *next ;n}LNode , *LinkList;nnLinkList Createlist( LinkList L){n int num ;n LNode *p , *...
数据结构C语言版约瑟夫环
采用线性链表编写的约瑟夫环,C语言版 typedef struct Node {int no; int secert; struct Node *next; }Node, *LinkList;
基本数据结构-------链表List与链表节点ListNode
来源: http://www.cppblog.com/cxiaojia/archive/2012/07/31/185760.htmlnn线性表?分类(优缺点,查找、删除、插入的复杂度)?例子?n 链表和线性表的关系?n 链表的分类?是根据什么划分的?n线性表nn线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。nn线性表分类:顺序存储结构、链...
C++操作单链表ListNode
C++操作单链表ListNoden通过C++进行单链表的创建、打印以及利用栈实现逆序打印。n单链表的创建和打印n#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;nusing namespace std;nn//定义结构体nstruct ListNode{n int val;n ListNode* next;n};nnclass operateListn{npublic:n /*创建单链表*/n ...
C链表之学生成绩管理系统
TXT,省流量,#include "stdafx.h" #include "stdlib.h" typedef struct student { int num; char name[10]; char sex[5]; int age; char phone[12]; char addr[50]; double score[6]; }data; typedef struct studentlink { data stu; struct studentlink *next; }node; node *create(); int length(node *head); void print(node *head); node *append(node *head); node *insert(node *head); node *remove(node *head); node *alter(node *head); node *find(node *head); node *sort(node *head); node *sortbydesc(node *head); node *sortbyasc(node *head); void avarage(node *head); void pass(node* head); node *reverse(node *head); void save(node *head); int load1(node *head); node *load();
操作系统实验三
设备管理n●基本要求:在前面的实验基础上实现设备管理功能的模拟,主要包括通道和控制器的添加和删除,设备的添加、删除,设备的分配和回收。n●实验提示:n1、假定模拟系统中已有键盘、鼠标、打印机和显示器四个设备,另有三个控制器和两个通道。n2、设备管理子系统涉及到系统设备表(SDT)、通道控制表(CHCT)、控制器控制表(COCT)和设备控制表(DCT)来体现输入输出系统的四级结构和三级控制。应实现上...
node.js的一些数据结构和调用方法_第一集
说说node.js中的一些数据结构和使用方法第一个:url类型的转化为对象1,urlLib.parse()就是专门处理url地址信息的,传来的数据当然是get方法啦2,urlLib.parse(参数1,参数2),第一个参数是地址信息,第二个是true,含义是解析成对象,若为false则是字符串3,.pathname就是获取?前面的地址,如下图。.query就是将解析为对象,&amp;amp;为分割符,=左...
朱有鹏C语言高级---4.9.5--单链表--从链表头部插入新节点(5)
 nn 朱有鹏C语言高级---4.9.5--单链表--从链表头部插入新节点(5)nn nn从链表头部插入新节点nn(1)注意写代码过程中的箭头符号 ( -&amp;gt; ),和说话过程中的指针指向。这是两码事,容易搞混。箭头符号实际上是用指针方式来访问结构体,所以箭头符号的实质是访问结构体中的成员。更清楚一点说程序中的箭头和链表的连接没有任何关系;链表中的节点通过指针指向来连接,编程中表现为一个赋值语句...
双向链表,定义一个节点,具有next、previous和data属性
public class Node {rnpublic Node next;rnpublic Node previous;rnprivate int data;// 节点中存放的数据rnrnrnpublic Node(int data) {rnthis.data = data;rn}rnrnrnpublic String toString() {// 覆盖该方法,用来打印该节点rnreturn d
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习node区块链 区块链开发教程node