IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 数据结构学习记录 -> 正文阅读

[C++知识库]数据结构学习记录

目录

前言

前提说明

线性表

顺序表的具体实现

单链表的具体实现

//未完



前言

本文章用于记录个人学习过程与心得,欢迎讨论!

使用书籍: 数据结构 (C语言版 第2版) (严蔚敏 李冬梅 吴伟民)


前提说明

  • 教材中使用的描述语言为"类C语言",是一种介于C和C++之间的伪代码,方便转化为实际C/C++代码
  • 文件后缀名为 .cpp , 目的是使用C++中的 &引用类型?/?new?/?delete 等来简化代码实现 , 但主要代码风格还是以C语言为主
  • 以下补充一些书籍中出现的宏定义和自定义类型
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1	//不可行
#define OVERFLOW -2		//溢出
//Status 是函数类型,其值是函数结果状态代码
typedef int Status;

以下主要记录具体代码实现,不再详细记录教材已有的具体理论内容

线性表

????????顺序表的具体实现

#include <stdio.h>
#include <stdlib.h>

//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1	//不可行
#define OVERFLOW -2		//溢出

//Status 是函数类型,其值是函数结果状态代码
typedef int Status;

typedef char ElemType;		//自定义数据类型,根据实际需求设置即可
#define MAXSIZE 100

typedef struct {
	ElemType* elem;
	int length;
}SqList;

Status InitList_Sq(SqList& L) {		//构造一个空的顺序表L
	L.elem = new ElemType[MAXSIZE];	//为顺序表分配空间
	if (!L.elem) exit(OVERFLOW);	//存储分配失败
	L.length = 0;					//空表长度为0
	//printf("SqList Initialization Successful!\n");
	return OK;
}

void DestroyList(SqList& L) {
	if (L.elem) delete L.elem;		//释放存储空间
}

void ClearList(SqList& L) {
	L.length = 0;					//将线性表长度置为0
}

int GetLength(SqList& L) {			//获取线性表长度
	return (L.length);
}

int IsEmpty(SqList& L) {			//判断线性表是否为空
	if (L.length == 0) return TRUE;
	else return FALSE;
}

int GetElem(SqList L, int i, ElemType& e) {//获取第i个元素传递给e
	if (i<1 || i>L.length) return ERROR;
	e = L.elem[i - 1];
	return OK;
}

int LocateElem(SqList L, ElemType e) {    //查找元素e是否存在于L
	for (int i = 0; i < L.length; i++) {
		if (L.elem[i] == e) return (i + 1);
	}
	return 0;        //存在则返回其序号,不存在则返回0
}
//以下为查找元素方法 LocateElem(); 的另一种写法
//int LocateElem(SqList L, ElemType e) {
//	//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
//	int i = 0;
//	while (i < L.length && L.elem[i] != e)i++;
//	if (i < L.length) return i + 1;//查找成功,返回序号
//	return 0;//查找失败,返回0
//}

void TraverList(SqList L) {		// 插入\删除方法中调用了该方法,故该方法需定义在插入\删除方法之前
	printf("   线性表中元素为:	");
	for (int i = 0; i < L.length; i++)
		printf("%c	", L.elem[i]);
	printf("\n");
}

Status InsertList(SqList& L, int i, ElemType e) {
	if (i<1 || i>L.length) return ERROR;	//i值不合法
	if (L.length == MAXSIZE) return ERROR;	//当前存储空间已满
	for (int j = L.length - 1; j >= i - 1; j--)
		L.elem[j + 1] = L.elem[j];		//将插入位置及之后的元素后移一个单位
	L.elem[i - 1] = e;					//将新元素e放入第i个位置
	L.length++;							//表长增加 1
	TraverList(L);
	return OK;
}

Status DeleteList(SqList& L, int i, ElemType& E) {
	if ((i < 1) || (i > L.length)) return ERROR;	//i值不合法
	E = L.elem[i - 1];
	for (int j = i; j < L.length; j++)
		L.elem[j - 1] = L.elem[j];
	L.length--;
	TraverList(L);
	return OK;
}

int main() {
	SqList L;
	ElemType E = NULL;
	int index = 1;

	//初始化线性表并输出初始化状态
	printf(">>>初始化线性表状态:%d\n\n", InitList_Sq(L));

	//手动赋初值
	L.elem[0] = 'a';
	L.length++;
	L.elem[1] = 'b';
	L.length++;
	L.elem[2] = 'c';
	L.length++;
	L.elem[3] = 'd';
	L.length++;
	L.elem[4] = 'e';
	L.length++;
	TraverList(L);
	printf("\n");

	//测试 输出测试结果:

	//测试 GetLength();
	printf(" >>获取线性表长度:%d\n\n", GetLength(L));

	//测试 IsEmpty();
	printf(" >>判断线性表是否为空:%d\n\n", IsEmpty(L));

	//测试 GetElem();
	int GE = GetElem(L, index, E);
	printf(" >>获取元素标号:%d		获取状态:%d		元素内容:%c\n\n", index, GE, E);

	//测试 LocateElem();
	E = 'e';
	int LE = LocateElem(L, E);
	printf(" >>查找元素:%c		元素位置:%d\n\n", E, LE);

	//测试 InsertList();
	E = 'A';
	int IL = InsertList(L, index, E);
	printf(" >>插入元素:%c		插入位置:%d		插入状态:%d\n", E, index, IL);
	GE = GetElem(L, index, E);
	printf("  >获取元素标号:%d		获取状态:%d		元素内容:%c\n", index, GE, E);
	printf("  >获取线性表长度:%d\n\n", GetLength(L));

	//测试 DeleteList();
	int DI = DeleteList(L, index, E);
	printf(" >>删除元素标号:%d		删除状态:%d		删除元素值:%c\n", index, DI, E);
	printf("  >获取线性表长度:%d\n", GetLength(L));
	GE = GetElem(L, index, E);
	printf("  >获取元素标号:%d		获取状态:%d		元素内容:%c\n\n", index, GE, E);

	return OK;
}

运行结果:


? ? ? ? 单链表的具体实现

//

//未完

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 14:26:18  更:2021-10-02 14:27:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 23:49:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码