C++数据结构03--静态链式线性表的实现
头文件:
//静态链表头文件
#include "stdafx.h"using namespace std;#define MAXSIZE 250typedef int ElemType;typedef struct{ElemType data;int cur; //存在next的指针游标
} StaticLinkList[MAXSIZE];class StaticLinuralList{public:StaticLinuralList();//构造函数~StaticLinuralList();
private:int cur_Length;//初始化链表bool InitList(StaticLinkList L);//是否链表已满//return:true:满,false:非满bool isFull(StaticLinkList L);//获得一个可以插入的节点的下标//@param:L:需要的链表L//return:空的可插入的下标int GetEmptyPos(StaticLinkList L);//得到链表的长度//@param[in]:L:当前链表// return: 链表的长度int getListLength(StaticLinkList L); //插入数据//@param[in]:L:当前链表//@param[in]:pos:插入的位置//@param[in]:data:插入的数据// return:true:插入成功,false:插入失败bool InsertData(StaticLinkList L,int pos,ElemType data);//删除元素//@param[in]:L:当前链表//@param[in]:pos:删除的位置// return:true:删除成功,false:删除失败bool DeleteData(StaticLinkList L,int pos);//查找元素//@param[in]:L:当前链表//@param[in]:pos:位置// return:位置的数据ElemType FindDataByPos(StaticLinkList L,int pos);};
实现cpp文件:
/* 静态链表头文件 */#include "stdafx.h"
#include "StaticLineList.h"
using namespace std;StaticLinuralList::StaticLinuralList(){cur_Length = 0;//初始化长度为0;
}StaticLinuralList::~StaticLinuralList(){}//初始化链表
//其中 最后一个是cur为0 指向第一个坐标
bool StaticLinuralList::InitList(StaticLinkList L){int i = 0;for (i = 0 ; i < MAXSIZE-1;i++){L[i].cur = i+1;}L[MAXSIZE-1].cur = 0; //设置最后一个为空return true;
}//得到链表的长度
//@param[in]:L:当前链表
// return: 链表的长度
int StaticLinuralList::getListLength(StaticLinkList L){return cur_Length;
}//插入数据
//@param[in]:L:当前链表
//@param[in]:pos:插入的位置
//@param[in]:data:插入的数据
// return:true:插入成功,false:插入失败
bool StaticLinuralList::InsertData(StaticLinkList L,int pos,ElemType data){if (isFull(L)){std::cout << " 链表已经满了"<< endl;return false;}if (pos < 1 || pos > cur_Length + 1){cout << "Error to Insert!" << endl;}//获取可以插入的posint k = GetEmptyPos(L);int j = MAXSIZE-1;if (k){L[k].data = data;for(int i = 1; i <= pos -1; ++i){j = L[j].cur;}L[k].cur = L[j].cur;L[j].cur = k;++cur_Length;return true;}return false;
}//删除元素
//@param[in]:L:当前链表
//@param[in]:pos:删除的位置
// return:true:删除成功,false:删除失败
bool StaticLinuralList::DeleteData(StaticLinkList L,int pos){if (cur_Length == 0)//假设链表为空。不运行删除操作{return false;}if (pos<1 || pos>cur_Length )//假设删除的位置不合法,返回false{cout << "The invalid index!\n";return false;}int k = MAXSIZE - 1;int i = 1;for (; i <= pos- 1;++i)//找到第index-1个节点k{k = L[k].cur;}i = L[k].cur;//i为第index个节点的下标L[k].cur = L[i].cur;//将第index-1个节点的cur设置成第index个节点的cur,实现了把第index个节点排除在链表之外//data = StList[i].data;//返回第index个节点的data给e//DeleteSpace(i);//回收第index个节点的空间--cur_Length;//链表长度减一return true;
}//查找元素
//@param[in]:L:当前链表
//@param[in]:pos:位置
// return:位置的数据
ElemType StaticLinuralList::FindDataByPos(StaticLinkList L,int pos){if (pos==1){return L[pos-1].data;}if (L[pos-2].cur == 0){cout << "数据为空" << endl;return 0;}return L[pos-1].data;
}//判断是否已满
bool StaticLinuralList::isFull(StaticLinkList L)
{if (cur_Length == MAXSIZE-1){return true;}return false;
}//获取可插入的下标
int StaticLinuralList::GetEmptyPos(StaticLinkList L){//参考链接:https://blog.csdn.net/yyc1023/article/details/22230795int i = L[0].cur;if (i)//存在的话{L[0].cur = L[i].cur;}return i;
}
C++数据结构03--静态链式线性表的实现相关推荐
- php数据结构之线性表,php数据结构之顺序链表与链式线性表示例
本文实例讲述了php数据结构之顺序链表与链式线性表.分享给大家供大家参考,具体如下: 链表操作 1. InitList(L):初始化链表 2. DestroyList(L):删除连接 3. Clear ...
- 【数据结构】线性表之双向链式线性表
2019独角兽企业重金招聘Python工程师标准>>> public class DuLinkList<T> {// 定义一个内部类Node,Node实例代表链表的节点p ...
- Programming Ability Test学习 3-05. 求链式线性表的倒数第K项(15)
3-05. 求链式线性表的倒数第K项(15) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 给定一系列正整数,请设计一个尽可能高效的算法, ...
- 求链式线性表的倒数第K项 (20 分)
7-173 求链式线性表的倒数第K项 (20 分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整 ...
- PTA5-19 求链式线性表的倒数第K项
5-19 求链式线性表的倒数第K项 (20分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数 ...
- 链式线性表和顺序线性表
顺序线性表 顺序表的存储结构通常用一维数组来描述,数组的下标与元素在线性表中的序号相对应. 在这里插入代码片 线性表的存储结构: typedef struct {int elem[MAX_SIZE]; ...
- 拼题---求链式线性表的倒数第K项(两种算法的比较)
7-17 求链式线性表的倒数第K项 (20 分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表 ...
- 1-6 求链式线性表的倒数第K项
1-6 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数 ...
- 求链式线性表的倒数第K项(两种方法,第二种较好)
求链式线性表的倒数第K项 题目 答案 第一种解法 第二种解法(较好) 注意 题目 答案 第一种解法 这种方法是正常输入,然后将链表逆置,虽然pta是可以通过的(写数组应该都能通过),但明显没有下一种好 ...
最新文章
- shell脚本中的括号和实例
- mysql contains函数_多属性、多分类MySQL模式设计
- C#使用集合组织相关数据
- vb获取数组长度_如何实现数组的二分查找
- 【Windows CMD】设置编码格式
- 曼哈顿交易 - 题解
- SONIC架构简要分析-数据库
- 【数学建模】五:MATLAB优化模型求解方法(1):标准模型
- 递归算法php,php递归算法经典实例
- Linux-shell篇之while用法
- zscore标准化步骤_matlab标准化和反标准化——zscore
- 异方差检验 python_stata教程03-异方差的检验和处理
- 修改assets文件内容
- 齐聚一堂:共话网络安全人才培养新模式
- 为什么RSA 公钥指数(e=65537)
- 什么是.NET?什么是.NET Framework?什么是.NET Core?
- 该应用程序从products.json加载数据
- 《管理长歌行》——青蛙与蜘蛛的对话
- 2020-03-12-脑电分析之线性与非线性变换
- 2021长城杯pwn部分wp
热门文章
- 通过Nginx反向代理,实现远程调试本机代码
- Java中static变量作用和用法详解
- php xml cdata 解析,![CDATA[文本内容]]代表的意思
- 清除Docker中所有为<none>的镜像(虚悬镜像)
- java基础面试题之:i++与++i的区别
- 推荐系统和搜索引擎的关系
- shell基础07 函数
- 500 cannot be cast to javax.xml.registry.infomodel
- springboot启动mybatis
- SQL Server 数据库中的几个常见的临界值