单链表(C语言)

作者: PersisThd | 来源:发表于2019-06-18 11:09 被阅读3次

1、头文件:linklist.h

#include <stdio.h>

typedef struct Node
{
    int data;
    struct Node *next;
}Node;  //定义链表结构

typedef struct LINKLIST
{
    int length;
    Node header;
}LINKLIST;  //操控链表

void InitList(LINKLIST*);  //初始化链表
int ListEmpty(LINKLIST*);  //判断链表是否为空
int ListLength(LINKLIST*);  //返回链表长度
void GetElem(LINKLIST*, int, int *);  //获取指定位置的元素(pos从0开始)
void ListInsert(LINKLIST*, int, int); //在指定位置中插入新元素
void ListDel(LINKLIST*, int, int *);  //删除指定位置的元素
void ClearList(LINKLIST*);  //清空链表
void DestroyList(LINKLIST*);  //销毁链表

2、操作链表文件:linklist.c

#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"

void InitList(LINKLIST* L)
{
    L->length = 0;
    L->header.next = NULL;
}

int ListEmpty(LINKLIST* L)
{
    if(L->length == 0)
        return 1;
    return 0;
}

int ListLength(LINKLIST* L)
{
    return L->length;
}

void GetElem(LINKLIST *L, int pos, int *e)
{
    if(pos < 0 || pos >= L->length)
        return;
    if(L->length == 0)
        return;

    Node *pCur = &L->header;

    int i = 0;
    for(i=0;i<pos+1;i++)
    {
        pCur = pCur->next;
    }
    *e = pCur->data;
}

void ListInsert(LINKLIST *L, int pos, int e)
{
    if(pos < 0 || pos > L->length)
        return;

    Node* pCur = &L->header;
    int i = 0;
    for(i = 0; i < pos; i++)
    {
        pCur = pCur->next;
    }
    Node* pNew = (Node*)malloc(sizeof(Node));
    pNew->data = e;

    pNew->next = pCur->next;
    pCur->next = pNew;
    L->length++;

}

void ListDel(LINKLIST* L, int pos, int *e)
{
    if(pos < 0 || pos >= L->length)
        return;
    if(L->length == 0)
        return;

    Node* pCur = &L->header;
    int i = 0;
    for(i=0;i<pos;i++)
    {
        pCur = pCur->next;
    }

    Node* pDel = pCur->next;
    *e = pDel->data;
    pCur->next = pDel->next;

    free(pDel);
    L->length--;
}

void ClearList(LINKLIST *L)
{
    while(ListEmpty(L) != 1)
    {
        int tmp;
        ListDel(L, 0, &tmp);
    }
}

void DestroyList(LINKLIST *L)
{
    ClearList(L);
}

3、测试主函数:main.c

#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"

int main()
{

    LINKLIST ls;

    //链表初始化
    InitList(&ls);

    int i = 0;
    for(i=0;i<10;i++)
    {
        ListInsert(&ls, i, i+3);
    }

    for(i=0;i<10;i++)
    {
        int tmp = 0;
        GetElem(&ls, i, &tmp);
        printf("The num_%d element is: %d\n", i, tmp);
    }

    while(ListEmpty(&ls) != 1)
    {
        int tmp;
        ListDel(&ls, 0, &tmp);
        printf("The delete element is: %d\n", tmp);
    }

    DestroyList(&ls);
    system("Pause");
    return 0;
}
注意:上述三个文件在同一个工程下

相关文章

  • 单链表的C语言算法实现

    单链表的C语言算法实现 自己用C语言实现的单链表算法,有什么不正确的地方,请各位共同讨论与指正。

  • 单链表(C语言)

    1、头文件:linklist.h 2、操作链表文件:linklist.c 3、测试主函数:main.c 注意:上述...

  • 2018-09-13

    用c语言创建单链表,参数采用二级指针。 源码如下: //单链表头插法创建 #include #include #d...

  • 单链表相关学习笔记(C语言)

    以此文记录学习单链表的相关知识,以备后续回顾复习。完整代码:链表学习相关的笔记和代码(C 语言) 一、单链表相关说...

  • C语言实现常用数据结构:不带头结点的单链表(第4篇)

    使用示例 带头结点的单链表请参见: [C语言实现常用数据结构:带头结点的单链表(第3篇)(https://www....

  • 单链表实现(C语言)

    单链表是由结构体、指针相结合的一种数据格式, 看个简单的结构体,格式如下: 这个结构体只存放了一个int的数据类型...

  • 通用单链表(C语言)

    1、头文件c_linklist.h 2、操作链表文件c_linklist.c 3、测试主函数文件main.c 注意...

  • C语言的单链表

    SingleLinkedList.h SingleLinkedList.c main.c

  • 插入任意数据形成有序单链表并逆置单链表

    可直接运行的完整C语言版有序单链表的生成和逆置标签:数据结构、线性表、带头结点的单链表、逆置单链表欢迎与喜欢数据结...

  • 单链表 C++

    单链表 C++ 题目 1、创建单链表2、初始化单链表3、释放单链表4、获取单链表中元素的数量5、输出单链表中的所有...

网友评论

    本文标题:单链表(C语言)

    本文链接:https://www.haomeiwen.com/subject/gvbxqctx.html