线性表1-顺序表

顺序表属于线性表的一种存储表现形式,在计算机内部表示为一段连续的内存空间,数组就是一种顺序表。

下面是顺序表的主要操作:

  1 //顺序表的基本操作
  2 template <typename Type> class Vector {
  3 private:
  4     //size为容量,length为当前元素个数
  5     int size,length;
  6     Type *data;
  7 public:
  8     //构造函数
  9     Vector(int input_size) {
 10         size=input_size;
 11         length=0;
 12         data=new Type[size];
 13     }
 14
 15     //析构函数
 16     ~Vector() {
 17         delete[] data;
 18     }
 19
 20     //插入函数
 21     bool insert(int loc, Type value) {
 22         if (loc < 0 || loc > length) {
 23             return false;
 24         }
 25         if (length >= size) {
 26             expand();
 27         }
 28         for (int i = length; i > loc; --i) {
 29             data[i] = data[i - 1];
 30         }
 31         data[loc] = value;
 32         length++;
 33         return true;
 34     }
 35
 36     // 扩容函数
 37     void expand(){
 38         Type *old_data=data;
 39         //这里将容量扩为原来的2倍
 40         size=size*2;
 41         data=new Type[size];
 42         for(int i=0;i<length;i++){
 43             data[i]=old_data[i];
 44         }
 45         delete[] old_data;
 46     }
 47
 48     //查找函数,找到则返回下标,否则返回-1
 49     //传入参数:const防止其被修改,&避免传入后重新创建参数浪费空间
 50     int search(const Type &value) {
 51         for(int i=0;i<length;i++){
 52             if(data[i]==value){
 53                 return i;
 54             }
 55         }
 56         return -1;
 57     }
 58
 59      //删除指定位置的元素
 60      bool remove(int index) {
 61         if(index<0||index>=length){
 62             return false;
 63         }
 64         for(int i=index+1;i<length;i++){
 65             data[i-1]=data[i];
 66         }
 67         length--;
 68         return true;
 69     }
 70
 71     //遍历函数
 72     void print() {
 73         for(int i=0;i<length;i++){
 74             if(i>0){
 75                 cout<<" ";
 76             }
 77             cout<<data[i];
 78         }
 79         cout<<endl;
 80     }
 81
 82     //获取指定位置的元素
 83     Type get_data(int loc){
 84         if(loc<0||loc>=length){
 85             cout<<"failed"<<endl;
 86             return 0;
 87         }
 88         return data[loc];
 89     }
 90
 91     //修改指定位置的元素
 92     bool change_data(int loc,Type new_data){
 93         if(loc<0||loc>=length){
 94             return false;
 95         }
 96         data[loc]=new_data;
 97         return true;
 98     }
 99
100     int get_length(){
101         return length;
102     }
103
104     //将顺序表左移k位
105     void left_shift(int k){
106         if(k<=0||k>=length){
107             return;
108         }
109         Type *temp=new Type[k];
110         for(int i=0;i<k;i++){
111             temp[i]=data[i];
112         }
113         for(int i=k;i<length;i++){
114             data[i-k]=data[i];
115         }
116         for(int i=0;i<k;i++){
117             data[i+length-k]=temp[i];
118         }
119         delete[] temp;
120     }
121
122 };
123
124
125 //求两个递增集合的交集:从第一个元素开始往后比较,小的往后继续走,相等的就加入记录结果的Vector中
126 void intersect(Vector<int> &listA, Vector<int> &listB, Vector<int> &intersection){
127     int length_A=listA.get_length(),length_B=listB.get_length();
128     int i_a=0,i_b=0,i_c=0;
129     while(i_a<length_A&&i_b<length_B){
130         if(listA.get_data(i_a)<listB.get_data(i_b)){
131             i_a++;
132         }
133         else if(listA.get_data(i_a)>listB.get_data(i_b)){
134             i_b++;
135         }
136         else{
137             intersection.insert(i_c, listA.get_data(i_a));
138             i_a++;
139             i_b++;
140             i_c++;
141         }
142     }
143 }
时间: 2024-10-28 20:11:51

线性表1-顺序表的相关文章

线性表之顺序表奇偶调整和单链表就地逆置

线性表之顺序表奇偶调整,就是指将顺序表的奇数与偶数位置互换,以最优方法解决,因为方法很多,比如,开辟一个新的顺序表分别存放奇偶数,也可以从头向后寻找奇偶数放置到尾部或头部,但这些都会增大时间与空间的消耗.最优法则是前后分别寻找奇偶不同类型数,满足前奇后偶(或前偶后期),交换两数位置,实现时间复杂度O(n),空间O(1)的方案. void AdjustSqlist(SeqList *L) { int i=0,j=L->last; int temp; while(i<j) { while(L-&g

线性链表之顺序表

顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 特点:顺序存取,随机访问. /* Name: SeqList Copyright: 1.0 Author: Johnny Zen Date: 04/06/17 21:51 Description: 线性链表之顺序表 *//* Chinese:顺序(线性)表 English:SeqList*/#in

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

【算法和数据结构】_17_小算法_线性结构:顺序表

/* 本程序用来测试数据结构中的线性结构:顺序表 */ #include <stdio.h> #include <stdlib.h> #define LINEAR_MAX_SIZE 64 struct LinearList { int* List; //顺序表指针 unsigned short int ListLen; //顺序表最大的元素个数 unsigned short int CurrentLen; //顺序表当前元素的个数 }; typedef struct LinearL

《数据结构》复习之线性表(顺序表和链表)

线性表的概念 线性表的比较 线性表的数据结构 顺序表的算法操作 双链表的补充 总结 1.线性表的概念 线性表的存储结构有顺序存储结构和链式存储结构两种.前者成为顺序表,后者称为链表. 顺序表: 顺序表就是把线性表中的所有元素按照其逻辑顺序,一次存储到从指定的存储 位置开始的一块连续的存储空间中,如下图所示. 链表 在链表的存储中,每一个节点不仅包含所存元素本身的信息,还包含元素之间的逻辑关系的信息,即前驱节点包含后继节点的地址信息,这样就可以通过前驱节点中的地址信息方便地找到后继节点的位置,如下

C#线性表之顺序表

线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素: (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是一个接一个的排列.因此,可以把线性表想象为一种数据元素序列的数据结构. 线性表的接口如下所示. public interface I

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一个元素有前驱元素,单无后继元素. 可以抽象为如下表述: 元素1 元素2 元素3 元素4 元素5 元素6 然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)                  2.在内存中离散存储的线性表-----链表(如单链表,双链

[C++] 数据结构(C):线性表之顺序表

1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + Status GetElement(SeqList L, int i, ElementType &e) (按位)取值  + int LocateElement(SeqList L, ElementType e) (按值)查找  + Status ListInsert(SeqList &L, int i, ElementType e) (按位)插入  + Status ListDelet

数据结构-线性表_顺序表

进入大学一年了,今日终于有勇气写写随笔并展示出来了. 如有不足之处,请大家指正. 今日我想写的就是我对数据结构-线性表_顺序表的理解. 不BB了,进入正题!!!!! 数据结构中的逻辑结构分为线性结构和非线性结构,而线性表就属于线性结构. 线性结构是 n 个数据元素的有序(次序)集合,它有下列几个特征: 集合中必存在唯一的一个 "第一个元素": 集合中必存在唯一的一个 "最后的元素": 除最后元素之外,其它数据元素均有唯一的 "后继": 除第一元素

数据结构Java实现02----线性表与顺序表

[正文] 本节内容: 线性结构 线性表抽象数据类型 顺序表 顺序表应用 一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构. 二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,...a