【Data_Structure笔记1】线性表的顺序存储【顺序表】
2017-08-19 20:16
330 查看
#ifndef _DATA_STRUCTURE_SEQLIST_H_ #define _DATA_STRUCTURE_SEQLIST_H_ #include<iostream> #include<string> #define MAXSIZE 100 //【0】定义线性表的最大长度 typedef struct //【1】定义顺序表【节点的数据的数据类型】【自定义数据类型】 { char strKey[15]; char strName[20]; int iAge; }DATA; typedef struct //【2】定义【顺序表】结构,此时,这个顺序表就是一个【数据类型】,和基本型一致 { DATA listData[MAXSIZE]; //【1】存储顺序表数据的静态数组 int iListLength; //【2】顺序表的长度,顺序表中实际存储数据元素的个数 }SeqList; /************************************************************************************************************************************* 模块说明: 顺序表的八大基本操作 *************************************************************************************************************************************/ void SeqListInit(SeqList* SL); //【1】顺序表的初始化操作。构造一个空的线性表 int SeqListLength(SeqList* SL); //【2】求表的长度 int SeqListInsert(SeqList* SL,int pos,DATA data); //【3】在顺序表SL的第pos的索引位置插入一个数据元素data int SeqListDelete(SeqList* SL,int pos); //【4】删除顺序表中的第pos个位置上的数据元素 int SeqListLocate(SeqList* SL,char* key); //【5】按关键字进行查找 DATA* SeqListGet(SeqList* SL,int pos); //【6】按序号返回元素 bool IsEmpty(SeqList* SL); //【7】判空 #endif // !_DATA_STRUCTURE_SEQLIST_H_
#include"SeqList.h" /*********************************************************************************************************** 函数说明: 初始化顺序表为空表 ***********************************************************************************************************/ void SeqListInit(SeqList* SL) { SL->iListLength = 0; } /*********************************************************************************************************** 函数说明: 求解顺序表的长度,顺序表中实际存储数据元素的个数 ***********************************************************************************************************/ int SeqListLength(SeqList* SL) { return SL->iListLength; } /*********************************************************************************************************** 函数说明: 判断顺序表是否为空 ***********************************************************************************************************/ bool IsEmpty(SeqList* SL) { if (SL->iListLength == 0) { return true; } else { false; } } /*********************************************************************************************************** 函数说明: 顺序表的插入操作 操作步骤: [1]插入先判满,并且判断插入的位置是否正确 [2]向后移动数据元素 [3]插入 [4]表长加1 ***********************************************************************************************************/ int SeqListInsert(SeqList* SL, int pos, DATA data) { if (SL->iListLength >= MAXSIZE) { std::cout << "[NOTICE]当前存储空间已满,不能插入新的数据!" << std::endl; #ifdef DEBUG std::system("pause"); #else return 0; #endif // DEBUG }//if if (pos<0 || pos>SL->iListLength) { std::cout <<"[NOTICE]插入节点的位置不正确!" << std::endl; #ifdef DEBUG std::system("pause"); #else return 0; #endif // DEBUG }//if for (int i = SL->iListLength; i > pos; i--) { SL->listData[i] = SL->listData[i-1]; } SL->listData[pos] = data; SL->iListLength++; return 1; } /*********************************************************************************************************** 函数说明: 顺序表的删除操作 操作步骤: [1]删除先判空,并且判断删除的位置是否合法 [2]将Apos----Alength-1的元素向前移动 [3]修改表长 ***********************************************************************************************************/ int SeqListDelete(SeqList* SL, int pos) { if (IsEmpty(SL)) { std::cout << "[NOTICE]顺序表是空表,不能删除元素!" << std::endl; #ifdef DEBUG std::system("pause"); #else return 0; #endif // DEBUG } if (pos < 1 || pos>SL->iListLength) { std::cout <<"[NOTICE]删除的结点有误,不能删除此节点!" << std::endl; #ifdef DEBUG std::system("pause"); #else return 0; #endif // DEBUG } for (int i = pos; i < SL->iListLength; i++) { SL->listData[i - 1] = SL->listData[i]; } SL->iListLength--; return 1; } /*********************************************************************************************************** 函数说明: 根据关键字进行查找 ***********************************************************************************************************/ int SeqListLocate(SeqList* SL, char* key) { for (int i = 0; i < SL->iListLength; i++) { if (std::strcmp(SL->listData[i].strKey, key) == 0) { return (i+1); } } return 0; } /*********************************************************************************************************** 函数说明: 根据序号进行查找 ***********************************************************************************************************/ DATA* SeqListGet(SeqList* SL, int pos) { if (pos<0 || pos>(SL->iListLength - 1)) { std::cout <<"[NOTICE]查找元素结点的序号是错误的,不能返回节点值!"<< std::endl; #ifdef DEBUG std::system("pause"); #else return 0; #endif // DEBUG } return &(SL->listData[pos]); }
/*************************************************************************************************************************** 文件说明: 【顺序表】的实现代码 详细说明: [1]线性表示具有【相同数据类型】n(n>=)个数据元素的【有限序列】。 [2]【线性表】是一种逻辑结构,表示元素之间是一对一的相邻关系。【顺序表】和【链表】是一种存储结构。 基本分类: [1]逻辑结构: 1---一般线性表 2---操作受限的线性表结构:栈、队列、数组、广义表、串 3---树:一般树形结构,二叉树(平衡二叉树,满二叉树,完全二叉树等) 4---图:有向图、无向图 【顺序表】: [1]【线性表】的【顺序存储】称为【顺序表】,它是用一组【地址连续的存储单元】依次存储线性表中的数据元素,从而使得逻辑 上相邻的存储单元,物理位置上相邻。 [2]【顺序表】是一种可以【随机存储】的数据结构。 [3]【顺序表的缺点】是,在插入和删除操作的时候,需要移动大量的数据元素,这样会严重影响插入和删除操作的效率,由于顺序 表存在这个缺点,所有后面又引出了【线性表的链式存储】结构 运行环境: Win10+VS2015 时间地点: 陕西师范大学 文津楼 2017 8.18 作 者: 九 月 ****************************************************************************************************************************/ #include"SeqList.h" void SeqListPrint(SeqList* SL) { for (int i = 0; i < SL->iListLength; i++) { std::cout <<"【"<<i<<"】"<<"<key,name,age> = " << SL->listData[i].strKey <<" "<< SL->listData[i].strName << " " << SL->listData[i].iAge << std::endl; } } int main(int argc,char* argv[]) { SeqList SL; //【0】定义顺序表数据类型的变量 DATA data; DATA dataP; char strKey[15]; SeqListInit(&SL); //【1】初始化顺序表 int i = 0; while (true) { std::cout <<"[NOTICE]输入添加的结点(学号,姓名,年龄):"<<std::endl; std::cin >> data.strKey; //std::cout<<std::endl; std::cin >> data.strName; //std::cout << std::endl; std::cin >> data.iAge; //std::cout << std::endl; if (data.iAge) { if (!SeqListInsert(&SL, i, data)) { break; } } else { break; } i++; } std::cout << "[NOTICE]显示顺序表中的所有数据!" << std::endl; SeqListPrint(&SL); std::system("pause"); return 0; }
相关文章推荐
- 【Data_Structure笔记2】线性表的链式存储【单链表】
- 学习笔记---线性表的基本操作---顺序存储(C语言)
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 线性表的顺序存储--顺序表
- [SDUT](3324)顺序表应用1:多余元素删除之移位算法 ---顺序存储(线性表)
- 线性表的顺序存储——顺序表
- 学习笔记------数据结构(C语言版) 线性表顺序存储
- 线性表的顺序存储——顺序表
- [学习笔记]线性表的顺序存储
- 【Data_Structure笔记9】查找算法之【顺序查找和折半查找】
- 线性表的顺序存储------顺序表
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- 结构算法 001 线性表的顺序存储--顺序表
- 线性表顺序存储的各项操作的实现
- Building a 3D Portal Engine 笔记之(1) Data Structure For 3D Graphics
- 线性表的顺序存储
- 线性表的顺序存储方式
- LeetCode 笔记27 Two Sum III - Data structure design
- 数据结构之线性表——栈的顺序存储