链表——C语言

链表是一个很常用的结构。主要分为头结点和各个结点,相互链接起来。

                                                                                                                        结构如图所示                     

    链表的删除、增加、查找都是对结点进行操作。

增加是将数据储存在一个节点中,再将该节点与原有的链表相链接,单链表根据插入位置的不同,分为头插,尾插,中间插入。

删除是对对应节点的删除,将后指针p直接指向前指针q的下一个。

查询是对用户提供的东西进行查询,可以使节点序号·,节点数据...依照这些查询想要的结果。

代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**结构体**/
typedef struct Link
{
    int data;
    struct Link *next;
}link;
link *L=NULL;
/**创建**/
void creatL()
{
    L=(link*)malloc(sizeof(link));//申请空间
    L->next=NULL;//指向空
    printf("创建成功!\n");
}
/**输出链表**/
void prinL()
{
    link *p;
    p=L;
    while(p->next!=NULL)
    {
        p=p->next;
        printf(" %d ",p->data);
    }
}

/**增加**/
void InitL()
{
    int n;//n代表一共要加入几个数据
    link *q,*p;//利用指针q、p进行链表的增加
    p=L;//将p指向头结点
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        q=(link *)malloc(sizeof(link));//申请空间
        scanf("%d",&q->data);
        p->next=q;//将p、q节点相连接起来
        p=p->next;//将p指针移动到下一位
    }
    p->next=NULL;//将p的下一位指向空
    printf("增加成功!\n");
}
/**删除**/
void deteL()
{
    int n;//n代表一共要删除的数据
    link *q,*p;//利用指针q、p进行链表的增加
    p=L;//将p指向头结点
    q=p->next;//将q指向p的下一个
    scanf("%d",&n);
    while(p->next!=NULL)
    {
        if(q->data==n)//如果找到想要删除的节点
        {
            p->next=q->next;//将p的下一个指向q的下一个
            free(q);//释放q
            p=q->next;
            break;
        }
        p=p->next;//移动指针q、p方便寻找删除结点
        q=q->next;
    }
    printf("删除成功!\n");
}
/**查找**/
void searchL()//查找第n个结点数值
{
    int n;//第n个结点
    int a=1;//用于计数
    link *p,*q;
    p=L;
    q=p->next;
    scanf("%d",&n);
    while(p->next!=NULL)
    {
        if(a==n)//若找到
        {
            printf("该节点为:%d",q->data);
            break;
        }
        p=p->next;
        q=q->next;
        a++;
    }
}
/**主函数**/
int main(void)
{
    creatL();
    InitL();
    searchL();
    deteL();
    prinL();

    return 0;
}
运行结果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值