C++实现单向链表操作(实验3--作业)

一、单向链表介绍

单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据域和一个指向下一个节点的指针域。

  1. 结构特点

    • 单向链表的节点通过指针链接在一起,形成一个线性的数据结构。
    • 链表的头节点通常是一个特殊的节点,它不存储实际的数据,只用于指向链表的第一个存储数据的节点。
    • 每个节点的指针指向下一个节点,最后一个节点的指针为NULL,表示链表的结束。
  2. 优点

    • 动态内存分配:可以根据需要动态地添加和删除节点,不需要预先确定链表的大小。
    • 插入和删除操作高效:在链表中间插入或删除节点只需要修改几个指针,时间复杂度为O(1)O(1)O(1)(在已知插入或删除位置的情况下)。
  3. 缺点

    • 随机访问困难:不像数组可以通过下标直接访问元素,在链表中访问特定位置的元素需要从头节点开始遍历,时间复杂度为O(n)O(n)O(n)
  4. 常见操作

    • 初始化:创建一个空链表,通常包括创建头节点并将其指针域设置为NULL
    • 插入节点:可以在链表的头部、尾部或特定位置插入新节点。
    • 删除节点:根据给定的条件删除链表中的节点。
    • 查找节点:在链表中查找具有特定值的节点。
    • 遍历链表:从头到尾遍历链表,访问每个节点的数据。

二、代码总结

这段 C++代码实现了一个单向链表的多种操作,包括初始化、插入、删除、查找、排序、合并和逆置等功能。

  1. 功能模块

    • 初始化和销毁
      • LinkedListInit函数用于初始化一个空链表,创建头节点并分配内存。
      • LinkedListDestroy函数用于销毁链表,释放每个节点的内存空间。
      • LinkedListClear函数用于置空链表,删除链表中的所有节点,但保留头节点。
    • 插入操作
      • LinkedListAddHead函数实现头插法,在链表头部插入新节点。
      • LinkedListAddTail函数实现尾插法,在链表尾部插入新节点。
      • LinkedListInsert函数按序号在链表中插入新节点。
    • 删除操作
      • LinkedListDelete函数按序号删除链表中的节点。
    • 查找操作
      • LinkedListFind函数按值在链表中查找节点。
    • 打印操作
      • LinkedListPrint函数用于打印链表中的所有节点。
    • 排序操作
      • LinkedListSort函数实现冒泡排序,对链表中的节点进行排序。
    • 合并操作
      • LinkedListMerge函数将两个有序链表合并为一个有序链表。
    • 逆置操作
      • LinkedListReverse函数实现链表的原地逆置。
  2. 整体流程

    • main函数中,首先初始化两个链表L1L2,分别通过头插法和尾插法创建链表。
    • 然后对L2进行插入和删除操作,对L1进行插入和删除操作。
    • 接着对L1L2进行排序。
    • 之后创建一个新的链表MergeList,并将L1L2合并到MergeList中。
    • 最后在MergeList中查找特定值,并对MergeList进行原地逆置操作。
    • 最后销毁所有链表,释放内存。

下列是我的代码演示

#include<bits/stdc++.h>
using namespace std;

#define MAXSIZE 100 
#define OVERFLOw -2
#define OK 1
#define ERROR 0

typedef int Status;
typedef int eleType;
typedef struct LNode {
   
   
	eleType data;
	struct LNode *next;
} LNode, *LinkList;

/*
初始化一个空链表							OK
链表的置空和销毁							OK
前插法建表、后插法建表						OK
能够在链表中实现元素的查找、插入和删除		OK
能够输出链表的全部元素						OK
链表元素的排序及有序链表的合并(选做)		OK
链表的原地逆置(选做)						OK
*/

//初始化一个空链表
Status LinkedListInit(LinkList &L){
   
   
	L = new LNode;
	if(!L) exit(OVERFLOw);
	L->next = NULL;
	return OK;
}

//链表的销毁
Status LinkedListDestroy(LinkList &L){
   
   
	while(L){
   
   
		LinkList temp = L;
		L = L->next;
		delete temp;
	}
	return OK;
}

//链表的置空
Status LinkedListClear(LinkList &L){
   
   
	LinkList p = L->next;
	while(p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值