数据结构之链表学习笔记

来源:互联网 发布:淘宝图片主图尺寸 编辑:程序博客网 时间:2024/05/16 19:53

数据结构之链表学习笔记


结构体定义

typedef struct LNode{    int data;    struct LNode *next;}LNode,*LinkList;
  1. typedef是重新将现有的类型定义一个新的类型名(别名)。
  2. LNode是给这个结构起的一个名字,可以用LNode去定义变量,在这里已经和int/char这样的关键字一样了。
  3. *LinkList是指向这个结构的一个指针,也可以去定义变量,定义出来的是指向这个结构的指针变量
  4. 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

  1. L是一个指针,sizeof(L)==4,(大小为4),
L = (LinkList)malloc(sizeof(LNode));    printf("%x\n",L);  //和下面的值不一样    printf("%x\n",&L);

关于new

  1. new的返回值是指针,理解成地址.
  2. 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语言是学的挺好的啊,但这次又学会了不少东西^_^.

0 0
原创粉丝点击