线性表_单链表的基本操作

typedef int ElementType;
typedef  struct LNode* LinkList;
typedef  struct LNode* PtrToNode;
typedef struct LNode
{
    ElementType data;
    PtrToNode next;
} LNode;

LinkList CreateLinkList(int n);     //创建长度为n的单链表
PtrToNode FindByPos(LinkList l, int pos);   //根据指定位置查找节点
PtrToNode FindByValue(LinkList l, ElementType value);   //根据指定值查找节点
void Insert(LinkList l, ElementType x, int pos);    //于指定位置插入
void Delete(LinkList l, int pos);   //删除指定位置节点

LinkList CreateLinkList(int n){

    LinkList l;
    PtrToNode tmpCell, tail;

    l = (LinkList*)malloc(sizeof(LNode));
    l->next = NULL;

    ElementType data;
    for(int i = 0; i < n; i++){
        scanf("%d", &data);
        tmpCell = (PtrToNode)malloc(sizeof(LNode));
        tmpCell->data = data;
        tmpCell->next = NULL;

        if(i == 0)
            l->next = tmpCell;
        else
            tail->next = tmpCell;
        tail = tmpCell;
    }
    return l;
}

PtrToNode FindByPos(LinkList l, int pos)
{

    int i = 1;
    LinkList p = l->next;

    while(p && i < pos)
    {
        p = p->next;
        i++;
    }

    if(i == pos)
        return p;
    return NULL;
}

PtrToNode FindByValue(LinkList l, ElementType value)
{

    LinkList p = l->next;
    while(p && p->data != value)
        p = p->next;
    return p;
}

void Insert(LinkList l, ElementType x, int pos)
{
    PtrToNode node = (PtrToNode)malloc(sizeof(LNode));
    node->data = x;
    node->next = NULL;

    if(pos == 1)
    {
        node->next = l->next;
        l->next = node;
    }
    else
    {
        PtrToNode pre = FindByPos(l, pos - 1);
        if(!node)
            return;
        else
        {
            node->next = pre->next;
            pre->next = node;
        }
    }
}

void Delete(LinkList l, int pos){

    PtrToNode tmpCell;

    if(pos == 1){
        tmpCell = l->next;
        l->next = tmpCell->next;
    }
    else{
        PtrToNode pre = FindByPos(l, pos - 1);
        if(!pre || !pre->next)
            return;
        else{
            tmpCell = pre->next;
            pre->next = tmpCell->next;
        }
    }

    free(tmpCell);
    tmpCell = NULL;
}

猜你喜欢

转载自blog.csdn.net/hang981601026/article/details/82942452