用C语言描述数据结构的问题

typedef struct Node
{ Elem Type data;
struct Node * next;
} Node, * LinkList;
请解释一下每一行是什么意思,重点解释倒数两句

typedef struct Node //这里,typedef 是定义Node, * LinkList为struct Node {Elem Type data; 结构体
struct Node * next;
}
{ Elem Type data;
struct Node * next;//这里,定义 * next为以这个struct Node 结构名为类型的指针。也就是说在这只前,先定义struct Node 结构体。
} Node, * LinkList//这里,typedef 是定义Node, * LinkList为struct Node {Elem Type data; 结构体。一个是名,一个是指针!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-04
elem type 是用typedef定义的数据类型,
next是指向结构自身的指针,链表是一种递归的数据类型
node就是struct Node这种数据类型的一个别名,就像typedef int node 一样,node也是一种数据类型,linklist我觉得是错误的,
(没见过typedef int myint, *myintptr;这种形式)
下面表达才是正确的:
struct NODE
{ Elem Type data;
struct NODE * next;
};
typedef NODE node;
typedef NODE *linklist;
而像下面;
struct NODE
{ Elem Type data;
struct NODE * next;
} node, * LinkList;
node将是struct NODE的一个实例,node不再是一种数据类型,而是一个变量.
......不知道你听懂没有?
第2个回答  2009-04-04
typedef struct Node
{ Elem Type data;
struct Node * next;
} Node, * LinkList;

这里把整个定义过程拆成 个部分
1、typedef struct Node {....} Node这是定义一个结构体,并用typedef指定结构体别名为Node(最后那个Node)。
2、, * LinkList; 这个是定义结构体指针
3、Elem Type data; 这个是结构体Node的成员一定义,类型是结构体ElemType
4、struct Node * next;这个是结构体指针的定义*Next

总体来说这个定义是一个链表。结构体的成员一是一个结构,二就是指向下一个结构体地址的指针next;
第3个回答  2009-04-04

typedef struct Node
{ Elem Type data;
struct Node * next;
} Node, * LinkList;
中,中间部分是结构体定义,为线性链表结点的结构:
struct Node
{ Elem Type data;
struct Node * next; //指向下一个结点的指针
}

typedef ... Node,*LinkList;
是用上述结点结构自定义了两个新的数据类型Node和LinkList,Node与结构体类型完全等效,LinkList是一个指向该结构体类型实体的指针类型.如
struct Node head;
Node head;
等效,
struct Node *p;
LinkList *p;
等效.

参考资料:严蔚敏. 数据结构(C语言版)PP28,北京:清华大学出版社,1997

关于数据结构的问题,用C语言描述
1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈,循环队列,链队等。栈与队列存取数据(请注意包括:存和取两部分)的特点。2.递归算法。栈与递归的关系,以及借助栈将递归转向于非递归的经典算法:n!阶乘问题,fib数列问题,hanoi问题,背包问题,二叉树的递归和非递归遍历问题,图的深度遍历与栈的关系...

一道数据结构(c语言描述)题,希望大佬帮我看看,萌新不会?
struct PLU{ double r,i;};PLU plu_add(PLU a,PLU b,char c){\/\/运算函数 PLU t;if(c=='+'){\/\/+ t.r=a.r+b.r;t.i=a.i+b.i;} else if(c=='-'){\/\/- t.r=a.r-b.r;t.i=a.i-b.i;} else if(c=='*'){\/\/ t.r=a.r*b.r-a.i*b.i;t.i=a.r*b.i...

用c语言求树的高度(数据结构)
include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}Link;void insertNode(Link *head, int data) { Link *p = head; Link *q = (Link *)malloc(sizeof(Link)); q->data = data; q->next = NULL; while(p->next != NULL...

c语言数据结构的问题,用尾插法建立链表
void creat(linklist L)\/\/L为一级指针,也是头指针{int f = 1;node *s, *r;r = L;while (f) {s = (node*)malloc(sizeof(node));scanf("%s", s->a);if (s->a[0] != '^') {r->next = s;r = s;}else {f = 0;free(s); \/\/ 释放 s}}r->next = NULL; \/\/ ...

谁能帮我把这些数据结构操作用C语言描述出来?谢了
include<stdio.h> int n,t;void suan(int n,int x){ int a[40]={0},i;while (n){ a[++a[0]]=n%x;n\/=x;} for (i=a[0];i>=1;i--)printf("%d",a[i]);} int main(){ scanf("%d%d",&n,&t);\/\/n是原数,t是进制 printf("(%d)10=(",n);suan(n,t);printf(...

用C语言编程,数据结构题 要快!答的好再加更多悬赏
\/\/\/*显示数据*\/\/\/ \/\/\/ void show(link l){ link p; int j;p=l;j=0;printf("链表的值为:\\n");while(p->next){ printf("%d\\n",p->next->date);p=p->next;} } \/\/\/ \/\/\/ \/\/\/销毁链表\/\/\/ \/\/\/ void destorylinst(link &L){ while...

谁能帮我把这些数据结构操作用C语言描述出来?谢了
我以下的答案当了C里面也有引用类型 假定对sqqueue结构以及status类型的定义如下:struct sqqueue { int head,tail;int count;qelemtype list[1000];\/\/qelemtype类型表示队列元素类型,必须事先按照程序的具体需要定义好 };enum status { succeed,fail };用于进行队列操作的各函数如下:status initqueue(...

用C语言实现数据结构的题目:一元多项式相加
struct poly \/\/设置结构体 { int xi;int zhi;struct poly *next;};struct poly *jianli(void) \/\/建立链表 { struct poly *p1,*head1,*p2;head1=(struct poly*)malloc(sizeof(poly));p1=(struct poly*)malloc(sizeof(poly));scanf("%d %d",&p1->xi,&p1->zhi);head1->next=p1;p1...

谁能帮我把这些数据结构操作用C语言描述出来?谢了
int i,k,m,n,num[nmax],*p;printf("please input the total of numbers:");scanf("%d",&n);p=num;for(i=0;i<n;i++)(p+i)=i+1;i=0;k=0;m=0;while(m<n-1){ if(*(p+i)!=0) k++;if(k==M+n){ *(p+i)=0;k=0;m++;} i++;if(i==n) i=0;} while(*p...

c语言 数据结构 本人不才看不出问题 ,希望各位大虾指教,谢谢、、请说...
这里应该加一个return 0才符合函数定义!} void DispList(sequenlist *L) \/\/输出线性表L。要返回值有什么用哦?{ int j;for(j=0; j<L->last; j++){ printf("%c",L->data[j]);} printf("\\n"); \/\/最后加个换行 } 逻辑问题请LZ再仔细研究一下,有问题再问 ...

相似回答
大家正在搜