链表的插入与删除操作 简单C语言实现完整代码

链表的插入与删除操作 简单C语言实现完整代码

#include "stdio.h"       
#include "stdlib.h"

typedef struct Node
{
    int data;
    struct Node *next;
}Node;
typedef struct Node *LinkList;

int InitList(LinkList *L) 
{ 
    *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
    if(!(*L)) /* 存储分配失败 */
            return 0;
    (*L)->next=NULL; /* 指针域为空 */ 
    return 1;
}

int ListInsert(LinkList *L,int i,int e)
{ 
	int j;
	LinkList p,s;
	p = *L;   
	j = 1;
	while (p && j < i)     /* 寻找第i个结点 */
	{
		p = p->next;
		++j;
	} 
	if (!p || j > i) 
		return 0;   /* 第i个元素不存在 */
	s = (LinkList)malloc(sizeof(Node));  /*  生成新结点(C语言标准函数) */
	s->data = e;  
	s->next = p->next;      /* 将p的后继结点赋值给s的后继  */
	p->next = s;          /* 将s赋值给p的后继 */
	return 1;
}

int ListDelete(LinkList *L,int i,int *e) 
{ 
	int j;
	LinkList p,q;
	p = *L;
	j = 1;
	while (p->next && j < i)	/* 遍历寻找第i个元素 */
	{
        p = p->next;
        ++j;
	}
	if (!(p->next) || j > i) 
	    return 0;           /* 第i个元素不存在 */
	q = p->next;
	p->next = q->next;			/* 将q的后继赋值给p的后继 */
	*e = q->data;               /* 将q结点中的数据给e */
	free(q);                    /* 让系统回收此结点,释放内存 */
	return 1;
}

int ListTraverse(LinkList L)
{
    LinkList p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return 1;
}

void main()
{
	LinkList L;
	int i,j,k,n,e;

	i=InitList(&L);

	printf("请输入初始化链表的长度\n");
	scanf("%d",&n);

	printf("请输入初始化链表:");
	for(k=1;k<=n;k++)
	{
		scanf("%d",&j);
            i=ListInsert(&L,1,j);
	}
    printf("在L的表头依次插入初始化链表后:L.data=",n);
	 ListTraverse(L);

	 for(j=1;j<=10;j++)
            ListInsert(&L,j,j);
    printf("在L的表尾依次插入1~10后:L.data=");
    ListTraverse(L); 

	printf("请输入要删除的元素位置\n");
	scanf("%d",&j);
    ListDelete(&L,j,&e); /* 删除第j个数据 */
    printf("删除第%d个的元素值为:%d\n",j,e);
	ListTraverse(L);
}

实现效果截图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值