您的位置:首页 > 编程语言 > C语言/C++

【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)

2017-11-02 00:05 232 查看
http://blog.csdn.net/hanjing_1995/article/details/51539563

[cpp] view
plain copy

#define _CRT_SECURE_NO_WARNINGS 1  

#include<iostream><
4000
span style="margin:0px;padding:0px;border:none;background-color:inherit;">  

using namespace std;  

  

  

//单链表的实现  

#include<assert.h>  

  

  

typedef int DataType;  

  

typedef struct SListNode  

{  

    DataType _data;  

    struct SListNode* _next;  

}SListNode;  

  

  

SListNode* _CreateNode(DataType x)  

{  

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

    head->_data = x;  

    head->_next = NULL;  

    return head;  

}  

  

  

void PushBack(SListNode*& head, DataType x)  

{  

    if (head == NULL)  

    {  

        head = _CreateNode(x);  

        head->_next = NULL;  
    }  

    else  

    {  

        SListNode* cur = head;  

        while (cur->_next != NULL)  

        {  

            cur = cur->_next;  

        }  

        cur->_next = _CreateNode(x);  

    }  

      

}  

  

  

void PopBack(SListNode*& head)  

{  

    if (head == NULL)  

    {  

        return;  

    }   

    else if (head->_next == NULL)  

    {  

        free(head);  

        head = NULL;  

    }  

    else  

    {  

        SListNode* cur = head;  

        SListNode* next = head;  

  

        while (cur)  

        {  

            next = cur->_next;  

            if (next != NULL && next->_next == NULL)  

            {  

                free(next);  

                cur->_next = NULL;  

                return;  

            }  

  

            cur = cur->_next;  

        }  

    }  

      

}  

  

  

void PushFront(SListNode*& head,DataType x)  

{  

    if (head == NULL)  

    {  

        head = _CreateNode(x);  

    }  

    else  

    {  

        SListNode* pcur = _CreateNode(x);  

        pcur->_next = head;  

        head = pcur;  

    }  

}  

  

  

void PopFront(SListNode*& head)  

{  

    if (head == NULL)  

    {  

        return;  

    }  

    else if (head->_next == NULL)  

    {  

        free(head);  

        head = NULL;  

    }  

    else  

    {  

        SListNode* del = head;  

        SListNode* next = head->_next;  

        free(del);  

        del = NULL;  

        head = next;  

    }  

}  

  

  

void Insert(SListNode* head,int pos,DataType x)  

{  

    assert(pos >= 0);  

    SListNode* cur = head;  

    while (--pos && cur)  

    {              

        cur = cur->_next;          

    }  

    if (pos > 0)  

    {  

        printf("pos位置大于链表长度!\n");  

        return;  

    }  

    SListNode* newcur = _CreateNode(x);  

    if (cur->_next)  

    {  

        SListNode* next = cur->_next;  

      

        cur->_next = newcur;  

        newcur->_next = next;  

    }  

    else if (cur->_next == NULL)  

    {  

        cur->_next = newcur;  

    }  

}  

  

  

size_t Length(SListNode*& head)  

{  

    size_t count = 0;  

    SListNode* cur = head;  

    while (cur)  

    {  

        count++;  

        cur = cur->_next;  

    }  

    return count;  

}  

  

  

void PrintSList(SListNode*& head)  

{  

    if (head == NULL)  

    {  

        return;  

    }  

    SListNode* cur = head;  

    while (cur)  

    {  

        printf("%d->", cur->_data);  

        cur = cur->_next;  

    }  

    printf("\n");  

}  

  

  

void Test()  

{  

    SListNode* sList =NULL;  

    PushBack(sList, 1);  

    PushBack(sList, 2);  

    PushBack(sList, 3);  

    PushBack(sList, 4);  

    PushBack(sList, 5);  

    PrintSList(sList);  

  

    PopBack(sList);  

    PrintSList(sList);  

  

    PushFront(sList, 0);  

    PrintSList(sList);  

  

    PopFront(sList);  

    PrintSList(sList);  

  

    Insert(sList, 3, 10);  

    PrintSList(sList);  

  

    int ret = Length(sList);  

    printf("单链表长度为:%d\n", ret);  

}  

  

  

int main()  

{  

    Test();  

    system("pause");  

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐