【Data_Structure笔记1】线性表的顺序存储【顺序表】

来源:互联网 发布:友盟推送 php服务器端 编辑:程序博客网 时间:2024/05/16 15:51
#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的索引位置插入一个数据元素dataint  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 DEBUGstd::system("pause");#elsereturn 0;#endif // DEBUG}//ifif (pos<0 || pos>SL->iListLength){std::cout <<"[NOTICE]插入节点的位置不正确!" << std::endl;#ifdef DEBUGstd::system("pause");#elsereturn 0;#endif // DEBUG}//iffor (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 DEBUGstd::system("pause");#elsereturn 0;#endif // DEBUG}if (pos < 1 || pos>SL->iListLength){std::cout <<"[NOTICE]删除的结点有误,不能删除此节点!" << std::endl;#ifdef DEBUGstd::system("pause");#elsereturn 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 DEBUGstd::system("pause");#elsereturn 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;}



原创粉丝点击