单链表相关的基本操作

本文介绍了一个简单的单链表实现,包括初始化、插入、删除等核心操作,并提供了完整的C语言代码示例。通过这些基本操作,读者可以了解单链表的工作原理及其实现细节。

头文件

#pragma once
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define OVERFLOW -2
#define TRUE 1
#define FLASE 0
#define ERROR 0
typedef int ElemType;
typedef int  Status;

源文件

#include"c1.h"

typedef struct LNode {
	ElemType data;
	struct LNode* next;
}*LinkList;

//带头节点的链表的插入 删除操作的实现
Status InitList(LinkList& L) {  //ps: LinkList &L === LNode* &L,指针的引用:不仅可以访问L指向的区域,还可以改变L的值。而如果换成LinkList L or								LNode * L,指针:只可以访问L指向的区域并改变L指向的区域,但不能改变L的值
	L = (LNode*)malloc(sizeof(LNode)); //产生头结点,并使L指向此头结点   (指针的引用发挥作用,改变L的值)
	if (!L)
		exit(OVERFLOW);
	L->next = NULL;    //指针域为空
	return OK;

}
Status ListEmpty(LinkList L) {
	if (L->next)
		return TRUE;
	else
		return FLASE;
}

int ListLength(LinkList L)
{
	int  i = 0;
	LinkList p = L->next; //p指向首元结点
	while (p) {
		i++;
		p = p->next;
	}
	return i;
}
Status ListInsert(LinkList L, int i, ElemType e) {
	 //在带头结点的单链表L中第i个位置前插入e
	int j = 0;
	LinkList p = L, s;
	while (p && j < i - 1) {//找到第i-1个结点
		p = p->next;
		j++;
	}
	if (!p || j > i - 1)
		return ERROR;
	s = (LinkList)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}
Status ListDelete(LinkList L, int i, ElemType e) { 
	// 删除第i个结点,并用e返回其值
	int j = 0;
	LinkList p = L,q;
	while (p->next && j < i - 1) {  //寻找第i个结点,用p指向他
		p = p->next;
		j++;
	}
	if (!p->next || j > i - 1)
		return ERROR;
	q = p->next;
	e = q->data;
	p->next = q->next;
	free(q);  //释放被删结点
	return e;
}
void ListPrint(LinkList L) {
	LinkList p = L->next;
	while (p) {
		printf("%d", p->data);
		printf("   ");
		p = p->next;
	}
}

int main() {

	LinkList L;
	InitList(L);
	ElemType e;
	printf("请输入将在链表中插入的10个结点\n");
	for (int i = 1; i <= 10; i++) {

		scanf_s("%d", &e);
		ListInsert(L, i, e);
	}
	printf("打印输出链表所有结点\n");
	ListPrint(L);
	printf("\n");
	printf("删除第五个结点,并打印删除后的所有结点\n");
	ListDelete(L, 5, e);
	ListPrint(L);
	printf("\n");
	printf("在第四个结点前插入一个结点,请输入插入的结点的数据e\n");
	scanf_s("%d", &e);
	ListInsert(L, 4, e);
	printf("打印输出链表所有结点\n");
	ListPrint(L);
	printf("\n");

	system("pause");
	return 0;
}

结果显示
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二零二三.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值