您的位置:首页 > 理论基础 > 数据结构算法

数据结构之链表学习笔记

2015-04-02 11:47 357 查看

数据结构之链表学习笔记

结构体定义

typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;


typedef是重新将现有的类型定义一个新的类型名(别名)。

LNode是给这个结构起的一个名字,可以用LNode去定义变量,在这里已经和int/char这样的关键字一样了。

*LinkList是指向这个结构的一个指针,也可以去定义变量,定义出来的是指向这个结构的指针变量

LinkList L; L就是这个结构体类型的指针,类似 int * a; 里的a.

它相当于分开写的


struct LNode
{
int data;
struct LNode *next;
};
typedef struct LNode *LinkList;


*LinkList是代替struct LNode的类型了。

创建链表

void CreateList_L(LinkList &L,int n)
{
L = (LinkList)malloc(sizeof(LNode));    //新建一段8字节的空间,把空间的地址强制转换为LNode*类型并赋给L,设为18ff40
//----------------------------------------------------------------
L->next=NULL;  //打印链表是时判断是否到了尾部
//那个8字节空间的next值是NULL,即18ff40这个结点的next=NULL
//----------------------------------------------------------------
LinkList p = L;   //把L的值赋给p,p=18ff40
//----------------------------------------------------------------
LinkList p = L = (LinkList)malloc(sizeof(LNode));//实际上前两行也可以写成这一行,p的值为18ff40
//----------------------------------------------------------------
for(int i=0;i<n;i++)
{
LinkList q = (LinkList)malloc(sizeof(LNode));//新建一段大小为8字节的空间,把空间的地址赋给q,设为541f20
cin>>q->data;
p->next=q;//p是一个指针,它现在所指的是上一个创建的结点,p->next是上一个结点的next,第一次是:18ff40这个结点的next为541f20
p=q;//把当前结点的地址赋给p,p指向当前结点.p的值18ff40变为541f20
p->next=NULL;//当前结点的next为NULL.541f20的next为NULL
}
}


void CreateList_L(LinkList &L,int n)
//相当于:
void CreateList_L(LNode * &L,int n)


关于L

L是一个指针,sizeof(L)==4,(大小为4),

L = (LinkList)malloc(sizeof(LNode));
printf("%x\n",L);  //和下面的值不一样
printf("%x\n",&L);


关于new

new的返回值是指针,理解成地址.

malloc 函数返回的是 void * 类型

创建链表终极版

void CreateList_L(LinkList &L,int n)
{
LinkList p = L = (LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;i++)
{
LinkList q = (LinkList)malloc(sizeof(LNode));
cin>>q->data;
p->next=q;
p=q;
p->next=NULL;   //打印链表是时判断是否到了尾部
}
}


打印链表

void print(LinkList L)//不引用,不影响头指针
{
LinkList p = L->next;//L是头指针,指向的是头结点,头结点->data不赋值,所以p的值是头结点的next,即第一个结点的地址
int i;
while (p != NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}


这几行代码搞了我两天,当初学C语言是学的挺好的啊,但这次又学会了不少东西^_^.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: