[C++]线性链表之顺序表<一>
顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]。
使用的基本数据结构:数组
特点:顺序存取,随机访问。
/*
Name: SeqList
Copyright: 1.0
Author: Johnny Zen
Date: 04/06/17 21:51
Description: 线性链表之顺序表
*/
/*
Chinese:顺序(线性)表
English:SeqList
*/
#include<iostream>
using namespace std;
//顺序表ADT
const int MAXSIZE = 100;
template<class T>
class SeqList{
public:
SeqList(); //无参构造函数
SeqList(T array[],int length); //有参构造函数
~SeqList() { cout<<"\n析构成功!\n"<<endl; }; //析构函数
bool insertElement(T data,int n); //按位置插入元素
T deleteElementByLocation(int n); //按位置删除元素
int deleteElementByValue(T data); //按值删除元素
int searchElement(T data); //按值搜索元素,返回位置
T searchElement(int n); //按位置搜索元素,返回值
void print(); //输出表内元素
int getLength(); //获取当前元素个数
public:
T array[MAXSIZE]; //存放元素的数组
int length; //元素个数
};
//无参构造函数
template<class T>
SeqList<T>::SeqList(){
length = 0;
for(int i=0;i<MAXSIZE;i++){
array[i] = 0;
}
}
//构造函数
template<class T>
SeqList<T>::SeqList(T array[],int length){
this->length = length;
for(int i=0;i<length;i++){
this->array[i] = array[i];
}
cout<<"\n初始化成功!\n"<<endl;
}
//按[实际]位置插入元素
//2 8 9 0 3 7
//0 1 2 3 4 5
// ↑
// (n-1)
//比如:插入在第3个位置上
//起始: (从后往前)
//array[length] = array[length-1] //array[length]:增加的1个新结点
//结束:
//array[n] = array[n-1];//array[n-1]:要重置新值的位置
template<class T>
bool SeqList<T>::insertElement(T data,int n){
//防溢出
if(n<1||n>length){
return false;
}
for(int i=length;i>n-1;i--){
array[i] = array[i-1];
}
array[n-1] = data;
length++;
return true;
}
//按[实际]位置删除元素
//2 8 9 0 3 7
//0 1 2 3 4 5
// ↑
// (n-1)
//比如:插入在第3个位置上
//起始: (从前往后)
//array[n-1] = array[n] //array[n-1]:重置新值的位置
//结束:
//array[length-2] = array[length-1];//array[length-1]:要删除掉的结点
template<class T>
T SeqList<T>::deleteElementByLocation(int n){
//边界检测
if(n<1||n>=length)
return (T)false;
T value = array[n-1];
for(int i=n-1;i<=length-2;i++){
array[i] = array[i+1];
}
//减少表长度
length--;
//恢复删除掉的结点的默认值(0)
array[length] = 0;
return value;
}
//按值删除结点,返回实际位置
template<class T>
int SeqList<T>::deleteElementByValue(T data){
array[length] = data;
int i;
for(i=0;array[i]!=data;i++);
if(i!=length){ //found success
deleteElementByLocation(i); //按值删除
return i+1;
}else{ //found fail
//recover array[length]'s default value(0)
array[length] = 0;
return -1;
}
}
//按值查找
//算法:顺序查找
template<class T>
int SeqList<T>::searchElement(T data){
//array[length] as array's guard of border
T array[length] = data;
int i;
for(i=0;array[i]!=data;i++);
//recover array[length]'s default value(0)
array[length] = 0;
return i==length?(i+1):(-1); //-1 : not found
}
//输出表的长度
template<class T>
int SeqList<T>::getLength(){
return length;
}
//输出数组元素
template<class T>
void SeqList<T>::print(){
for(int i=0;i<length;i++){
if(i%10==0){
cout<<endl;
}
cout<<array[i]<<'\t';
}
cout<<"\n****************print end****************\n";
}
int main(){
//输入数据
const int n = 10;
char arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
//测试
SeqList<char> test(arr,n);
cout<<"表所有元素:"<<endl;
test.print();
test.insertElement('f',3);
cout<<"在第3个位置上插入元素 f "<<endl;
test.print();
//按位置删除结点
cout<<test.deleteElementByLocation(3)<<endl;
cout<<"删除第三个位置的元素后:"<<endl;
test.print();
//获取表长度
cout<<test.getLength();
return 0;
}
/*
Test Data:
1 0 9 8 6 5 4 3 2 7
*/
[C++]线性链表之顺序表<一>的更多相关文章
- [C++]线性链表之顺序表<二>
/* @content 线性链表之顺序表 @date 2017-3-21 1:06 @author Johnny Zen */ /* 线性表 顺序表 链式表[带头指针/不 ...
- [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...
- 数据结构:队列 链表,顺序表和循环顺序表实现(python版)
链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...
- C# 数据结构 线性表(顺序表 链表 IList 数组)
线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...
- 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...
- 线性表之顺序表(C语言实现)
线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一 ...
- [Python] 数据结构--实现顺序表、链表、栈和队列
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...
- 数据结构中的顺序表和链表(Python语言)
转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...
- 数据结构之动态顺序表(C实现)
线性表有2种,分为顺序表和链表. 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) 链表: 有3种,单链表.双向链表.循环链表(长度不固定) seqList.h ...
随机推荐
- JSF action actionListner 详解
https://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener actionLi ...
- vue--传值
传值:(如果传的是引用类型,当值发生改变时所有绑定他的全都发生改变,如果传的时值类型,就只有他自己发生改变) 父传子: 父页面:父组件定义一个属性 users:[ {name:'张三',positio ...
- [luogu3369][普通平衡树]
题目链接 思路 模板 只是有几个容易出错的地方 第45行容易忘记 第54行里面的cnt--和siz--容易忘记 第56行是根据id判断不是val 第60行siz--容易忘记 第64行是siz+1不是s ...
- margin纵向重叠
速记: 如p的纵向 margin 是 16px,那么两个之间纵向的距离是多少?-- 按常理来说应该是 16 + 16 = 32px,但是答案仍然是 16px. 因为纵向的 margin 是会重叠的,如 ...
- PHP快速排序算法
说明: 通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,继续递归用相同的方式来排序左边和右边,最后合并数组 示例: <?php $a = arr ...
- 用tkinter制作签名设计窗口
效果如下: from tkinter import * from tkinter import messagebox import requests import re from PIL import ...
- django的RestFramework模块的源码分析
一.APIView源码分析 查看源码的前提要知道,找函数方法必须先在自己的类中找,没有再往父类找,一层一层网上找,不能直接按ctrl点击 在我们自己定义的类中没有as_view方法的函数,所以肯定是继 ...
- Session每次访问都回新建对象问题的处理
写了一个测试Session的类,在同一个会话中的两个Servlet中通过Session进行域值传递,但是每次都回传递失败, 而返回的sessionID每次刷新都回不一样,之后通过sendRedirec ...
- Codeforces Round #523 (Div. 2) D. TV Shows
传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 题意: 有n个节目,每个节目都有个开始时间和结束时间. 定义x,y分别为租电视需要的花 ...
- 我们数学中常用的自然常数e代表什么?看完长知识了!
我们在学习期间都接触过自然常数e,也知道e ≍ 2.718,学过极限的同学应该也知道 那么大家知道e的含义是什么吗?为啥叫“自然常数”? e的含义可以用一个计算利息的例子来解释. 假如你有1块钱,银行 ...