【单链表】   c语言的单链表

    xiaoxiao2025-08-26  55

    单链表:是一种线性表,每个节点里面存储着下一个节点的指针,把存储的数据元素连起来。

            本文中应用了C++的引用来传参数。

    存储结构:

    typedef int DataType; typedef struct SListNode { DataType _data; struct SListNode*  _next; //指向下一个节点 }SListNode;

    链表中节点的建立与销毁:

    SListNode* _BuyNode(DataType x)   //建立节点

    {

    SListNode* tmp =(SListNode*) malloc(sizeof(SListNode));

    tmp->_data = x;

    tmp->_next = NULL;

    return tmp;

    }

    void DestorySList(SListNode*& pHead)  //销毁节点

    {

    SListNode* cur = pHead;

    while (cur)

    {

    SListNode* tmp = cur;

    cur = cur->_next;

    free(tmp);

    }

    pHead = NULL;

    }


    //   单链表的 增 删 查   ///

    #include<malloc.h> #include<assert.h> typedef int DataType; typedef struct SListNode { DataType _data; struct SListNode*  _next; //指向下一个节点 }SListNode; //void PushBack(SListNode*& pHead, DataType x); //void PopBack(SListNode*& pHead); //void PushFront(SListNode*& pHead, DataType x); //void PopFront(SListNode*& pHead); //SListNode* Find(SListNode* pHead, DataType x); //void Insert(SListNode* pos, DataType x); //void Erase(SListNode*& pHead, SListNode* pos); //void DestorySList(SListNode*& pHead); //void PrintSlist(SListNode* pHead);       SListNode* _BuyNode(DataType x)   //建立节点 { SListNode* tmp =(SListNode*) malloc(sizeof(SListNode)); tmp->_data = x; tmp->_next = NULL; return tmp; }     void DestorySList(SListNode*& pHead)  //销毁节点 { SListNode* cur = pHead; while (cur) { SListNode* tmp = cur; cur = cur->_next; free(tmp); } pHead = NULL; } void PrintSlist(SListNode* pHead) { SListNode* cur = pHead; while (cur) { printf("%d->", cur->_data); cur = cur->_next; } printf("NULL\n"); } void PushBack(SListNode*& pHead, DataType x)  //尾插 { //1.空 2.不为空 if (pHead == NULL) { pHead = _BuyNode(x); } else {  //找尾节点 SListNode* tail = pHead; while (tail->_next) { tail = tail->_next; } tail->_next = _BuyNode(x); } } void PopBack(SListNode*& pHead) { //空;一个节点;两个及以上节点 if (pHead == NULL) { return; } else if (pHead->_next == NULL) { free(pHead); pHead = NULL; } else { SListNode* tail = pHead; SListNode* prev = NULL; while (tail->_next) {     prev = tail; tail = tail->_next; } free(tail); prev->_next = NULL; } } void PushFront(SListNode*& pHead, DataType x)  //头插 { if (pHead == NULL) pHead = _BuyNode(x); else { SListNode* tmp = _BuyNode(x); tmp->_next = pHead; pHead = tmp; } } void PopFront(SListNode*& pHead) { if (pHead== NULL) return; else if (pHead->_next  == NULL) { free(pHead); pHead = NULL; } else { SListNode*tmp = pHead; pHead = pHead->_next; free(tmp); } } SListNode* Find(SListNode* pHead, DataType x)  //查 { SListNode* cur = pHead; while (cur) { if (cur->_data == x) return cur; cur = cur->_next; } printf("链表中无此数据\n"); return NULL; } void Insert(SListNode* pos, DataType x)  //增加节点 { assert(pos); SListNode* tmp = _BuyNode(x); tmp->_next = pos->_next; pos->_next = tmp; } void Erase(SListNode*& pHead, SListNode* pos) //删除 { assert(pos); if (pos == pHead) { pHead = pHead->_next; free(pos); return;  } SListNode* prev = pHead; while (prev) { if (prev->_next == pos) { prev->_next = pos->_next; free(pos); break; } prev = prev->_next; } }

    本文出自 “娜些维度的雪” 博客,请务必保留此出处http://1536262434.blog.51cto.com/10731069/1753811

    转载请注明原文地址: https://ju.6miu.com/read-1302012.html
    最新回复(0)