数据结构C语言

单链表(C语言)

2019-06-18  本文已影响3人  PersisThd

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;
}
注意:上述三个文件在同一个工程下
上一篇下一篇

猜你喜欢

热点阅读