
#include<iostream.h>
void booblesort(int * n)
{
for (int i=0i<10i++)
{
for (int j=ij<10j++)
{
if(n[j]<n[i])
{
int tmp=n[i]
n[i]=n[j]
n[j]=tmp
}
}
}
}
void main()
{
int arraylist[10]
for (int i=0i<10i++)
{
arraylist[i]=10-i
}
booblesort(arraylist)
for (int j=0j<10j++)
{
cout<<arraylist[j]<<' '
}
cout<<endl
}
#define DATATYPE2 chartypedef struct node
{DATATYPE2 data;
struct node *next;
}LINKLIST;
这是用C语言描述单链表结构. 第二行中typedef struct node到底是用typedef为一个结构体取一个新的类型名,还是struct node就是一个类型名,现在是用typedef定义一个新的类型名LINKLIST来代替已有的类型名struct node。(LINKLIST是定义的一个变量还是一类型名呢)
还有一个疑问就是第二行中typedef struct node 即然是定义结点类型,那么直接写成struct node 不就行了吗,为什么前面还要加一个typedef呢,这样的意图是什么呢?他是要为这个类型重新取一个新的类型名吗?如果是的话,那后面那个LINKLIST就是新的类型名,而不是一个变量了。对吗?
我刚开始学的时候也是和你一样迷惑不解,现在有点理解了,我说说我的想法吧:
typedef struct node //这里node是结构体的名字
LINKLIST应该是新的类型名,在以后的程序中如果你想定义一个node类型的结构体,那么你就可以这样定义:
LINKLIST ppt//ppt就是上面结构体的一个变量了
LINKLIST *ppt //ppt就是指向上面结构体的一个指针变量了
至于为什么用typedef struct node而不用struct node 呢,这是因为在C语言中以后你要定义一个结构体变量时,如果你用前者,可以用上面LINKLIST ppt如果用后者,就不行了,用后者的话,你定义一个结构体变量的话要用struct node ppt
但在C++中,好像两者都行,你可以编程试试
Link p 就是struct struct node *
即Link == LINKLIST *
所有有typedef的地方,都先把typedef去掉。
如果没有typedef, 很明显LINKLIST是一个struct node 的变量, Link 是 struct node *, nbsp 是 struct node &的变量
然后,加上typedef。所有的LINKLIST,Link, nbsp都从变量升级成一个类型。
即LINKLIST 是struct node 类型,Link 是 struct node *类型,nbsp是struct node &类型。
typedef struct Node *LinkList,就是把bai struct Node * 定义成了新类型 LinkList。
typedef是一种在计算机编程语言中用来声明自定义数据类型,后面的表示定义LinkList为LNode指针类型,用逗号进行分隔可以定义多个类型。这个类型是一个结构体的指针。
p是指针,L ->next也是指针,同类型指针赋值给指针是没有问题的。
第二个问题:在链表的插入删除时都需要对内存进行 *** 作,所以需要指针来实现具体的删除插入,不然的话都是形参,对真正的数据不起作用。
扩展资料:
指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行 *** 作。
链表内包含很多结点(当然也可以包含零个结点)。其中每个结点的数据空间一般会包含一个数据结构(用于存放各种类型的数据)以及一个指针,该指针一般称为next,用来指向下一个结点的位置。由于下一个结点也是链表类型,所以next的指针也要定义为链表类型。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)