C++实现线性表的顺序存储结构

将线性表的抽象数据类型定义在顺序表存储结构下用C++的类实现,由于线性表的数据元素类型不确定,所以采用模板机制。

  1 头文件seqlist.h
  2 #pragma once
  3 #include <iostream>
  4 const int MaxSize = 100;
  5 template<class T>// 定义模板类
  6 class SeqList
  7 {
  8 public:
  9
 10     SeqList() { Length = 0; };            // 无参构造函数,建立一个空的顺序表
 11     SeqList(T a[], int n);                // 有参构造函数,建立一个长度为n的顺序表
 12     ~SeqList() {};                        // 空的析构函数
 13     int leng() { return Length; }        // 求线性表的长度
 14     T get(int i);                        // 按位查找第i个元素
 15     int locate(T x);                    // 按值查找值为x的元素序号
 16     void insert(int i, T x);            // 在第i个位置插入值为x的元素
 17     T Delete(int i);                    // 删除第i个元素
 18     void printlist();                    // 打印线性表
 19
 20 private:
 21     T data[MaxSize];
 22     int Length;
 23
 24 };
 25
 26 #pragma region 成员函数定义
 27
 28 template<class T>
 29 inline SeqList<T>::SeqList(T a[], int n)
 30 {
 31     if (n > MaxSize)throw"参数非法";
 32     for (int i = 0; i < n; i++)
 33         data[i] = a[i];
 34     Length = n;
 35 }
 36
 37 template<class T>
 38 T SeqList<T>::get(int i)
 39 {
 40     if (i<1 || i>Length)throw"查找位置非法";
 41     else return data[i - 1];
 42 }
 43
 44 template<class T>
 45 int SeqList<T>::locate(T x)
 46 {
 47     for (int i = 0; i < Length; i++)
 48     {
 49         if (data[i] == x)
 50             return i + 1;
 51     }
 52     return 0;
 53 }
 54
 55 template<class T>
 56 void SeqList<T>::insert(int i, T x)
 57 {
 58     if (Length >= MaxSize)throw "上溢";
 59     if (i<1 || i>Length + 1)throw "插入位置非法";
 60
 61     for (int j = Length; j >= i; j--)
 62         data[j] = data[j - 1];
 63     data[i-1] = x;
 64     Length++;
 65 }
 66
 67 template<class T>
 68 T SeqList<T>::Delete(int i)
 69 {
 70     if (Length == 0)throw"下溢";
 71     if (i<1 || i>Length)throw"位置非法";
 72     T x = data[i - 1];
 73     for (int j = i; j < Length; j++)
 74         data[j - 1] = data[j];
 75     Length--;
 76     return x;
 77 }
 78
 79 template<class T>
 80 void SeqList<T>::printlist()
 81 {
 82     for (int i = 0; i < Length; i++)
 83         cout << data[i] << endl;
 84
 85 }
 86 主函数
 87 #include "seqlist.h"
 88 using namespace std;
 89 int main()
 90 {
 91     int arry[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 92         // 三种创建类对象的方法
 93     SeqList<int> seqlist;
 94     SeqList<int> seqlist1(arry,10);
 95     SeqList<int>* seqlist2 = new SeqList<int>(arry, 10);
 96     cout << seqlist1.get(5) << endl;
 97     cout << seqlist2->get(5) << endl;
 98     cout << seqlist1.locate(10) <<endl;
 99     cout << seqlist2->locate(10) << endl;
100     seqlist1.insert(3, 11);
101     seqlist2->insert(4, 12);
102     seqlist1.Delete(1);
103     seqlist2->Delete(1);
104     seqlist1.printlist();
105     seqlist2->printlist();
106
107     system("pause");
108     return 0;
109 }        
时间: 2024-11-15 06:30:29

C++实现线性表的顺序存储结构的相关文章

线性表的顺序存储结构

1.顺序表: 线性表占用的存储空间=n*sizeof(ElemType) n为线性表的长度,ElemType为线性表的元素类型,sizeof(ElemType)为每个元素所占存储空间大小(即字节数) 线性表的顺序存储结构利用数组实现,数组的基本类型是线性表中元素类型,数组大小大于等于线性表的长度. 基本运算实现: (1)建立顺序表 void CreateList(SqList *&L,ElemType a[],int n)    //由a中的n个元素建立顺序表 {  int i;    L=(S

线性表之顺序存储结构实现(上)

一,线性表的概念以及数学定义 1.线性表的概念 零个或多个数据元素的有限序列.首先说明这是一个序列,也就是说数据元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且仅有一个前驱和后继. 2.数学定义 若将线性表记为(a1...ai-1,ai,ai+1....an),则线性表中,ai-1领先于ai,ai领先于ai+1,则称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素,当i=1,2....n-1的时候,ai有且仅有一个直接后继元素,当i=2,3

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

线性表的顺序存储结构之顺序表类的实现_Java

在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同,即元素ai与其直接前驱ai-1及直接后继ai+1的存储位置相邻.顺序存储的线性表也成为顺序表(sequential list). 顺序表类SeqList提供线性表基于顺序存储结构的一种实现,它有两个私有成员变量table和n,

02.线性表(一)顺序存储结构

顺序存储结构 一.线性表基本概念 1.线性表定义 线性表(list)是指零个或多个数据元素的有限序列,所有数据元素为相同数据类型且一个数据元素可以由多个数据项组成.若将线性表记为(a1,..ai-1,ai,ai+1...,an),线性表元素的个数n(n>0,n=0时为空表)定义为线性表的长度,其中ai-1是ai 的直接前驱元素,ai+1是ai的直接后继元素. 2.线性表的抽象数据类型 ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,....an},每个元素的类型均匀Da

数据结构之线性表之顺序存储结构(3)

1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数据元素的有限序列. 如果用数学语言来进行定义: (声明:由于下标不是很好弄出来,所以只能表示下面这种方式了,请见谅!) 若线性表记作(a1,...ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i

2.2_线性表的顺序存储结构

[线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码] #define MAXSIZE 20 /*存储空间初始分配量*/ typedef int ElemType; /*ElemType类型依实际情况而定*/ typedef struct { Element data[MAXSIZE]; /*数组存储数据元素,最大值为MAXSIZE*/ int length; /*线性表当前长度为length*/ }SqlList; [线性表的顺序存储结

简要比较线性表的顺序存储结构和链式存储结构

我们分别从存储分配方式.时间性能.空间性能三方面来做对比. 存储分配方式 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素. 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 时间性能 <1>查找 顺序存储结构O(1) 单链表O(n) <2>插入和删除 顺序存储结构需要平均移动表长一半的元素,时间为O(n) 单链表在计算出某位置的指针后,插入和删除时间仅为O(1) 空间性能 顺序存储结构需要预分配存储空间,分大了,容易造成空间浪费,分小了,容易发生溢出. 单链

《大话数据结构》笔记(2)--线性表的顺序存储结构

线性存储结构的Java实现代码: https://github.com/Lyu0709/data-structure/tree/master/src/com/coding/basic/array 第三章 线性表 定义 数学语言 若将线性表记为(a1, ..., ai-1, ai, ai+1, ..., an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i=1,2,..,n-1时,ai有且仅有一个直接后继,当n=2,3,...,n

线性表的顺序存储结构和链式存储结构

前言 上一篇<栈>中提到了栈的顺序存储结构和链式存储结构,现在就对此做个简单的比较.因为栈是线性表的一种,顺序存储结构和链式存储结构实际是线性表的两种存储方式.而栈和队列都是两种重要的线性表结构.所以本文标题直接为线性表的顺序存储结构和链式存储结构. 开始比较两种不同的存储方式 一.顺序存储结构(也可称为顺序表) 顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配. 优点: (1)方法简单,各种高级语言中都有数组,容易实现. (2)不用为表示节点间的逻辑