C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)

原创 2016年05月30日 17:16:05
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#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)
{
    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;
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1734401

C++类中单链表的实现(头插、尾插、头删、尾删、指定位置插入、指定位置删除、链表长度、清空链表、链表排序)

#include using namespace std; class Node { public: Node():next(NULL){} Node(int n,Node...

单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)

单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)...

C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)

C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)...

C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)

http://blog.csdn.net/xiaofeige567/article/details/27484137 C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表...

单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)

单链表的定义:单链表是一种顺序存储的结构。 有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。 有一个尾结点,有值域,也有链域,链域值始终为NULL。 所以,在单链表中为找第i个...

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include #include #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #de...
  • blacop
  • blacop
  • 2017年02月24日 22:29
  • 404

数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并

头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并。

【数据结构】用C++实现单链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//头文件 #ifndef _LIST_H #define _LIST_H #include using namespace std; template class List; temp...

带表头的单链表算法分析(前插法示例,C语言实现)

前插法创建单链表 前插法的单链表基本操作1.前插法创建单链表 分析:首先这是一个带表头的单链表操作,第一行图片为空的单链表,也为表头。依次输入A,B,C,D四个值并用前插法保存到链表中。2. 前插法...
  • FreeApe
  • FreeApe
  • 2015年04月04日 15:09
  • 1311
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
举报原因:
原因补充:

(最多只允许输入30个字)