算法:单链表实现

Posted jmst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:单链表实现相关的知识,希望对你有一定的参考价值。

list.h

#ifndef _LIST_H_
#define _LIST_H_

struct Node;
typedef int ElementType;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

List MakeEmpty(List L);
int IsEmpty(List L);
Position Find(ElementType X,List L);
Position FindPrevious(ElementType X,List L);
void Delete(ElementType X,List L);
void Insert(ElementType X,List L,Position P);
void DeleteList(List L);

#endif

struct Node
{
    ElementType element;
    Position Next;
};

list.c

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

List MakeList(List L)
{
    Position P,temp;
    P=L->Next;
    while(P!=NULL){
        temp=P;
        P=P->Next;
        free(temp);
    }
    return L;
}
int IsEmpty(List L)
{
    return L->Next==NULL;
}
Position Find(ElementType X,List L)
{
    Position P;
    P=L->Next;
    L->Next=NULL;
    while(P!=NULL&&P->element!=X){
        P=P->Next;
    }
    return P;
}
Position FindPrevious(ElementType X,List L)
{
    Position P;
    P=L;
    while(P->Next!=NULL&&P->Next->element!=X){
        P=P->Next;
    }
    return P;
}
void Insert(ElementType X,List L,Position P)
{
    Position temp;
    temp=malloc(sizeof(struct Node));
    if(temp==NULL){
        printf("out of space");
        exit(1);
    }
    temp->element=X;
    temp->Next=P->Next;
    P->Next=temp;
}
void Delete(ElementType X,List L)
{
    Position P,temp;
    P=FindPrevious(X,L);
    if(P->Next!=NULL){
        temp=P->Next;
        P->Next=temp->Next;
        free(temp);
    }
}
void DeleteList(List L)
{
    MakeEmpty(L);
}

 

以上是关于算法:单链表实现的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言实现单链表的逆置?

字符单链表识别数字,字母,其它字符,并分为三个循环链表的算法c++实现

单链表的逆置使用递归算法出现-842150451这个值,请求高手予以解决。。

单链表的逆置使用递归算法出现-842150451这个值,请求高手予以解决。。

数据结构线性单链表的算法实现和时间复杂度分析

数据结构与算法 - 单链表逆转