学习 单链表 总结二

来源:互联网 发布:模具erp软件 编辑:程序博客网 时间:2024/04/30 11:39

学习 单链表 总结二

—-单链表的头结点、头指针及单链表的初始化等

头结点与头指针

头结点与头指针

头结点即第一个结点,头指针是指向第一个结点的指针. 在单链表中,可以没有头结点,但是不能没有头指针.

下面是头结点与头指针的关系:

// 定义结点的结构体typedef struct Node{    int data;    struct Node* next;}Node, *LinkList;

那么若定义:

LinkList L;

则L为链表的头指针.

// 创建一个结点L = (LinkList)malloc(sizeof(struct Node));

这时,L返回一个指针,并且赋给了头指针.

单链表的初始化

带头结点初始化

用上面的结构体定义. 直接代码如下:

// 声明头结点Node* head;// 带头结点初始化void InitList(Node** head){    *head = (Node*)malloc(sizeof(Node));    (*head)->next = NULL;}

不带头结点初始化

方法一:

// 声明头结点Node* head;void InitList(Node** head){    *head = NULL;}

方法二:

// 声明头结点Node* head;void InitList(Node* head){    head = NULL;}

为什么带头结点单链表的初始化只有一种方式?

因为不带头结点声明Node *head 时,C编译器将其自动初始化为NULL,于是根本不需要调用InitList(head); 也即不带头结点的初始化是个伪操作。而带头结点的初始化在堆开辟了一段内存,需要修改head指针变量指向的地址(即head的值),所以要修改head的值,必须传保存head变量的地址(即二维指针)。而直接调用CreatList(head);相当于传head变量的值,函数修改的是head的副本,无法真正改变head的值。

这其实本质上还是传值,传址的问题,只不过指针本身保存的地址,让这个过程变得有点纠结。在函数调用需要修改指针变量的指向(value)时,应该传递指针变量的地址(address)。

单链表的创建

带头结点的创建

void CreatList(Node** head){    Node* phead = *head;    Node* CurrentNode;    int InputValue;    while (scanf("%d", &a))    {        if (0 != a)        {            CurrentNode = (Node*)malloc(sizeof(Node));            CurrentNode->value = a;            phead->next = CurrentNode;            phead = CurrentNode;        }    }}

不带头结点的创建

不带头结点的初始化,第一个结点与其他结点的处理要分开!

void CreatList(Node** head){    Node* phead;    Node* CurrentHead;    int InputValue;    int i = 1;    while(scanf("%d", &a))    {        if (0 != a)        {            CurrentHead = (Node*)malloc(sizeof(Node));            CurrentHead->value = a;            // 第一个结点的处理操作            if (1 == i)            {                *head = CurrentHead;            }            else            {                phead->next = CurrentHead;            }            phead = CurrentHead;        }        else        {            phead->next = NULL;            break;        }        i++;    }       }

参考文档

http://www.nowamagic.net/librarys/veda/detail/1806

0 0
原创粉丝点击