单链表

说到链表,从大一就开始折腾,不复杂的一个东西愣是到现在也没好好实现过。说到底是自己执行力太低了。准备考研也有一段时间了,数据结构看了也有一段时间,该写点代码了。

链表没什么好说的,概念和方法都很简单,就直接贴代码吧,下面的实现是带头结点的。想了下,C++自己太半桶水了,还是老实用C吧,等初试完了再好好看看C++.

 

LinkList.h


#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

typedef int ElemType;

struct Node;
typedef struct Node* PtrToNode;
typedef PtrToNode LinkList;
typedef PtrToNode Position;

LinkList L_creatList();
void L_destroyList(LinkList list);
void L_makeEmpty(LinkList list);
void L_insert(Position pos, ElemType elem);
void L_delete(LinkList list, ElemType elem);
Position L_find(LinkList list, ElemType elem);
/* Locate the previous node for delete method */
Position L_findPre(LinkList list, ElemType elem);
int L_isEmpty(LinkList list);
/* routine for test */
void L_printList(LinkList);  
//PtrToNode L_header(LinkList list);


#endif // LINKLIST_H_INCLUDED


implementation is in the source file LinkList.c


#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "LinkList.h"

typedef struct Node
{
    ElemType data;
    PtrToNode next;
}Node;

LinkList L_creatList()
{
    LinkList L;

    L = malloc(sizeof(Node));
    /* Check the alloction */
    assert(L != NULL);
    L->next = NULL;

    return L;
}

Position L_find(LinkList list, ElemType elem)
{
    Position p = list->next;

    while(p != NULL){
        if(p->data == elem)
            return p;
        p = p->next;
    }

    /* Not found */
    return NULL;
}

Position L_findPre(LinkList list, ElemType elem)
{
    Position pre = list;
    Position cur = pre->next;

    while(cur != NULL){
        if(cur->data == elem)
            return pre;
        pre = pre->next;
        cur = pre->next;
    }

    return NULL;
}

/* Insert the Node after the position */
void L_insert(Position pos, ElemType elem)
{
    Position tmp = malloc(sizeof(Node));
    assert(tmp != NULL);
    tmp->data = elem;
    tmp->next = NULL;

    tmp->next = pos->next;
    pos->next = tmp;
}

int L_isEmpty(LinkList list)
{
    return list->next == NULL;
}

void L_delete(LinkList list, ElemType elem)
{
    Position pre = L_findPre(list, elem);

    if(pre != NULL){
        Position tmp = pre->next;
        pre->next = tmp->next;
        free(tmp);
    }
}

void L_makeEmpty(LinkList list)
{
    LinkList L = list;
    Position tmp;

    while(L->next != NULL){
        tmp = L->next;
        L->next = tmp->next;
        free(tmp);
    }
}

void L_destroyList(LinkList list)
{
    L_makeEmpty(list);
    free(list);
}

/* This routine just for test */
void L_printList(LinkList list)
{
    LinkList L = list->next;

    while(L != NULL){
        printf("%d ", L->data);
        L = L->next;
    }

    printf("\n");
}


之后几天把基本的数据结构补齐,就可以写写基本的算法了,包括之前写的排序,准备再用C实现下。

原文链接: https://www.cnblogs.com/leavingQ/archive/2012/04/08/2437209.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    单链表

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/46454

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午10:50
下一篇 2023年2月8日 下午10:51

相关推荐