数据结构入门(七)——线性结构(2)——链表的代码实现与操作(重要)

前言

本系列文章是笔者学习数据结构的笔记,如有不妥之处欢迎指正


目录


  • 链表的实现借助了动态内存只要不手动释放就会一直生效的特点
  • 本代码使用了函数来方便较为清晰地演示链表的创建与打印,实际都在主函数中也可
  • 有效节点: 存放数据的节点
#include<stdio.h>
#include<stdlib.h>

struct NODE
{
    
    
    int data;           //数据域

    struct NODE *Next;  //指针域
};

struct NODE * creat(int n);         //创建链表函数
void display(struct NODE *head);    //显示链表内容函数

int main()
{
    
    
    int n;

    scanf("%d",&n);         		//输入需要创建的链表有效节点的个数

    struct NODE *head = NULL;       //创建一个指针用充当两个函数的“桥梁”

    head = creat(n);

    display(head);

    return 0;
}

struct NODE * creat(int n)              //接收需要创建链表有效节点的数量
{
    
    
    int i;                              //定义一个循环变量i用于创建链表的各有效节点

    struct NODE *head = (struct NODE *)malloc(sizeof(struct NODE));
    struct NODE *tail;

    tail = head;                        //令tail指向head所指向的区域,即tail和head指向同一块区域,后续仅操作tail
    tail->Next = NULL;                  //令该结构的Nex指针成员指向空,链表初始化完成
 
    for(i=0;i<n;i++)
    {
    
    
        struct NODE *t = (struct NODE *)malloc(sizeof(struct NODE));   //定义一个新的结构作为链表创建过程中的数据暂存体

        scanf("%d",&t->data);  		    //输入数据
        tail->Next = t;                 //令链表主体的尾部节点指向新加入有效节点(尾部插入)
        t->Next = NULL;                 //此时新节点成为链表的最后一个节点,令其指针域指向空
        tail = t;                       //将“尾节点指针”指向链表的“最后一个节点”,
                                        // 注意此处所有的变量均为“指针类型”,更改其指向并不影响任何链表中的实际内容
    }
    return head;
}

void display(struct NODE *head)
{
    
    
    struct NODE *p = head ->Next;       //创建一个指针指向需要输出内容的节点

    while (p != NULL)
    {
    
    
        printf("%d ",p->data); 
        p=p->Next;                      //每输出一个节点的内容就令其后移一位
    }
}

输入

3
1 2 3

输出

1 2 3

猜你喜欢

转载自blog.csdn.net/qq_40016124/article/details/113172526
今日推荐