C语言之链表的创建与应用

一、添加新结点 

代码如下:

#include<stdio.h>
#include<stdlib.h>
struct link* create(int n)       //声明创建结点函数
{
	struct link* headnode, * node;       //创建头指针和结点指针
	headnode = (struct link*)malloc(sizeof(struct link));     //为headnode申请内存空间
	headnode->next = NULL;                    //只有头结点时,其指针域指向NULL(即指向空)
	for (int i = 0; i < n; i++)      //利用for循环给链表添加数据域
	{
		node = (struct link*)malloc(sizeof(struct link));    //为node申请内存空间(node成为新建结点)
		scanf("%d", &node->data);         //scanf接受客户端的值,为node的数据域赋值
		node->next = headnode->next;  //插入新节点前,headnode的指针域指向NULL(因为只有headnode结点)
		 //插入后,新建结点作为尾结点,其指针域要指向NULL,所以node->next= headnode->next(==NULL)
		
		headnode->next = node;    //插入后,新建结点node已经有指向了,此时它的前一位结点headnode会指向node的地址
		//即headnode->next = node
	}
}

图解:

二、删除指定结点

代码如下:

void deletenode(struct stu *head,int n){        //删除n处的结点
    struct stu *p=head,*pr=head;             #定义p、pr指针,均指向head
    int i=0;                    
    while(i<n&&p!=NULL){             //当到达指定结点时,且p不指向空
        pr=p;                    //将p的地址赋值给pr
        p = p->next;           //p指向下一个结点的地址
        i++;             //i+1,循环到p指向指定结点,pr指向指定结点的上一节点
    }
    if(p!=NULL){              //当p不为空时,即p不能指向尾结点之后的结点
        pr->next = p->next;       
        free(p);
    } else{
        printf("节点不存在!\n");
    }
}

三、插入结点

代码如下:

void insertnode(struct stu *head,int n){
    struct stu *p = head,*pr;     //插入结点,需通过定义两个新指针完成操作
    pr = (struct stu*)malloc(sizeof(struct stu));    //申请一段内存空间,让pr指针指向该内存
    printf("input data:\n");
    scanf("%d%s",&pr->id,pr->name);
    int i=0;

//当插入位置是尾结点时,只要在尾结点后再插入一个结点,并让尾结点的指针指向新建节点
    while(i<n&&p!=NULL){         //使p指向将要插入结点的位置
        p = p->next;
        i++;
    }
    if(p!=NULL){
        pr->next = p->next;
        p->next = pr;
    }else{
            printf("节点不存在!\n");
        }
}

图解:

3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值