数据结构学习——单链表ADT(程序化)

看了一点网上的代码,结合自己对链表的理解。将对链表常用的操作集合程序化如下:

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

typedef struct Node
{
    int Val;
    struct Node *next;
}List;

List *list_add(List **p,int Val);//此处是二级指针
void List_Print(List *p);
List *list_insert(List **p,int Val,int i);//i为插入的位置 Val插入的值
List *list_remove(List **p,int i);//删除指定位置i的值


int main()
{
    List *n=NULL;
    list_add(&n,0);
    list_add(&n,1);
    list_add(&n,2);
    list_add(&n,3);
    list_add(&n,4);
    list_insert(&n,5,3);
    list_insert(&n,6,2);
    list_remove(&n,2);
    list_remove(&n,3);
    List_Print(n);
    return 0;
}

List *list_remove(List **p,int i)//删除指定位置i的值
{
    int count=0;
    List *q,*a;
    a=*p;
    if(p==NULL)
        return NULL;
    for(count=0;count<(i-2);count++)
    {
        a=a->next;
        if(a==NULL)
            return NULL;
    }
    q=a->next;//后继元
    a->next=q->next;
    return *p;
}

List *list_insert(List **p,int Val,int i)
{
    int count=0;
    List *q,*a;
    a=*p;
    if(p==NULL)
        return NULL;
    for(count=0;count<(i-2);count++)
    {
        a=a->next;
        if(a==NULL)
            return NULL;
    }
    q=a->next;//后继元

    List *temp=(List *)malloc(sizeof(List));
    temp->next=q;
    temp->Val=Val;
    a->next=temp;
    return *p;
}

List *list_add(List **p,int Val)//此处是二级指针
{
    if(p==NULL)
        return NULL;

    List *temp=(List *)malloc(sizeof(List));
    temp->next=*p;
    temp->Val=Val;
    *p=temp;  //头指针移动到开始处 *P在此处的作用为头指针

    return *p;
}

void List_Print(List *p)
{
    if(p==NULL)
        printf("list is empty\n");
    while(p)
    {
         printf("%d\t",p->Val);
         p=p->next;
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值