2020年8月7日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
本文目录
1. 引言
用C++实现了简单的单链表类,功能包括插入、删除、查找相关元素,分离链表等操作。代码是用VS2019实现的,每个函数的功能都添加了一定注释,完整工程放在了我的github上,有需要的也可以自取。
github地址:https://github.com/March225/Data-structure-implemented-by-Cpp
2. 主文件——main.cpp
/**
* @Copyright (C) 2020 March. All rights reserved.
* @license GNU General Public License (GPL)
* @author March
* @email 345916208@qq.com
* @file main.cpp
* @brief 单链表的C++实现主文件
* @version 1.0
* @date 2020-08-07
*/
#include "stdafx.h"
#include "linklist.h"
int main()
{
FILE* stream1;
ios::sync_with_stdio(false); // 让c风格的输入输出流和c++的输入输出流分开,使cin读入的更快
freopen_s(&stream1, "10_1.in", "r", stdin); // 直接从文档中读取待输入的数据
// 下面展示的是按照元素值的奇偶性分解单链表的功能,实现函数为 SplitLinkListByParityOfVal()
LinkList* L1 = new LinkList();
int len;
cin >> len;
L1->CreateLinkListByInsertAtEnd(len);
L1->PrintLinkList();
LinkList* L1_odd = new LinkList();
LinkList* L1_even = new LinkList();
L1->SplitLinkListByParityOfVal(L1_odd, L1_even); // 实现分离
L1_odd->PrintLinkList(); // 打印奇数部分链表
L1_even->PrintLinkList(); // 打印偶数部分链表
L1->PrintLinkList(); // 打印原链表(由于原链表已经分解,因此打印出来为空)
delete L1;
delete L1_odd;
delete L1_even;
return 0;
}
3. 单链表类 .h文件——linklist.h
#pragma once
/**
* @brief 创建一个单链表类
*/
class LinkList
{
public:
LinkList();
~LinkList();
int GetLength(); // 返回单链表的长度
bool GetElemByPosition(int pos, ElemType& val); // 根据位置返回单链表的元素
bool CreateLinkListByInsertAtEnd(int len); // 尾插法创建单链表
bool CreateLinkListByInsertAtBeg(int len); // 头插法创建单链表
bool InsertElemBeforePosition(int pos, ElemType val); // 在第pos个结点前插入值为val的结点
bool FindElemByValue(int& pos, ElemType val); // 返回单链表中值为val的元素位置
bool DeleteElemByPosition(int pos); // 根据位置删除单链表的元素
bool InsertElemInOrder(ElemType val); // 在一个有序单链表中插入元素,并保证链表还是有序的
bool SplitLinkListByParityOfVal(LinkList*& l_odd, LinkList*& l_even); // 根据元素的奇偶性分离单链表
void PrintLinkList(); // 打印单链表的长度和元素
private:
ListNode* head_; // 单链表的哑结点
int length_; // 单链表的长度
};