详解创建一个新的链表

创建一个单链表

那什么是单链表?

  1. 简单说一下

我的理解,其实链表和数组是有很多相似的地方的。链表作为一种数据结构,它是用来存储数据的,举一个很形象的例子,就比如说以前玩的那个贪吃蛇,就是链表的一个很好的应用。在玩贪吃蛇的时候,食物就相当于一个新的结点,而在链表中,有很多对链表的操作,比如说:头插,尾插,排序插,中间插等等你可以想象成,将贪吃蛇吃到的食物是放在,头,尾,或者中间,或者按颜色的顺序进行排列,其实链表不难,理解了之后,写起来也是挺有意思的

下面是创建一个链表的代码式例

写的很简单,用了一点c++但大多数还是c的语法,简单来说我的思路是,先创建一个结点(结构体)->然后在主函数里面,获取到屏幕的输入数据后,将此时输入的数据存到一个结点当中->然后将结点串起来,形成一个链表。将结点串起来的方法有很多上面有提到了,就不再重复->最后的最后,就是将链表打印输出了

#include

using namespace std;

struct Node
{
    int data;
    struct Node * next;
};


int main()
{
    struct Node * head = nullptr;
    struct Node * tail = nullptr;
    struct Node * pre = nullptr; 
    int data;
    while(1)
    {
        //输入一个数
        cin >> data;
        if(data == 0)
        {
            break;
        }
        //初始化一个结点
        struct Node * pnew = (Node *)malloc(sizeof(Node));
        pnew->data = data;
        pnew->next = nullptr;

        //如果只有一个结点
        if(head == nullptr)
        {
            head = pnew;
            tail = pnew;
        }
        else//尾插
        {
            tail->next = pnew;//Tail的下一个指向新的结点 s
            tail = pnew;//让Tail作为新的结点s,即Tail结点往后移
        }
        /*
        头插
        {
        	pnew->next = head;//将新的结点放在Head的前面
        	head = pnew;//Head结点则往前移
        }
		*/
    }
    //打印链表
    while(head)
    {
        cout << " " << head->data;
        pre = head;
        head = head->next;
        pre->next = nullptr;
        free(pre);//释放堆空间
    }
    cout << endl;
    return 0;
}

你可能感兴趣的:(数据结构,链表)