线性表基本类的实现

  1 #include<iostream>//本线性表的last为个数,例如last为5,线性表值从0-4
  2 #include<cstdlib>
  3
  4 const int defaultsize = 100;
  5
  6 using namespace std;
  7
  8 template<class T>
  9 class SeqList
 10 {
 11 protected:
 12
 13         T *data;
 14         int maxSize;
 15         int last;
 16         void reSize(int newSize);//增大线性表的空间
 17
 18 public:
 19         SeqList(int sz = defaultsize);
 20         SeqList(SeqList<T>& L);
 21         ~SeqList(){delete[] data;}
 22         int size()const{return maxSize;}
 23         int Length()const{return last+1;}
 24         int search(T& x)const;
 25         int Locate(int i)const;
 26         bool getData(int i,T& x)const
 27         {
 28             if(i>0&&i<=last+1)
 29                 {
 30                         x=data[i-1];
 31                         return true;
 32                 }
 33           else
 34             return false;
 35         }
 36         void setData(int i,T& x)const
 37         {
 38             if(i>0&&i<=last+1)
 39             data[i-1]=x;
 40         }
 41        bool Insert(int i,T& x);
 42        bool Remove(int i,T& x);
 43        bool IsEmpty()
 44        {
 45            return (last ==-1)?true:false;
 46
 47        }
 48        bool IsFull()
 49        {
 50          return(last==-1)?true:false;
 51
 52        }
 53        void input();
 54        void output();
 55        SeqList<T>operator=(SeqList<T>& L);
 56        friend void deletemin(SeqList<int>& s);
 57
 58 };
 59 template<class T>
 60 void SeqList<T>::reSize(int newSize)
 61 {
 62       if(newSize!=maxSize)
 63     {
 64         T *newarray = new T[newSize];
 65             if(newarray ==NULL)
 66         {
 67             //cerr<<"内存分配错误!!"<<endl;
 68             exit(1);
 69         }
 70          int n=last+1;
 71          T*s =data;
 72          T*d=newarray;
 73          while(n--)
 74          {
 75              *d++=*s++;
 76          }
 77          delete []data;
 78          data=newarray;
 79          maxSize =newSize;
 80     }
 81 }
 82 template<class T>
 83 SeqList<T>::SeqList(int sz )
 84 {
 85
 86     if(sz>0)
 87     {
 88         maxSize=sz;
 89         last=-1;
 90         data= new T[maxSize];
 91         if(data ==NULL)
 92         {
 93             //cerr<<"内存分配错误!!"<<endl;
 94             exit(1);
 95         }
 96     }
 97
 98 }
 99 template<class  T>
100 SeqList<T>::SeqList(SeqList<T>& L)
101 {
102     maxSize=L.size();
103     last=L.length()-1;
104     data =new T[maxSize];
105     if(data ==NULL)
106     {
107         //cerr<<"内存分配错误!!"<<endl;
108         exit(1);
109     }
110      T value;
111      for(int i=1;i<=last+1;i++)
112      {
113          L.getData(i,value);
114          data[i-1]=value;
115      }
116
117 }
118 template<class T>
119 int SeqList<T>::search(T& x)const
120  {
121      for(int i=0;i<=last;i++)
122      {
123          if(data[i]==x)
124          return i+1;
125          return 0;
126      }
127  }
128 template<class T>
129 int SeqList<T>::Locate(int i)const
130 {
131     if(i>=1&&i<=last+1)
132     return i;
133     else
134     return 0;
135
136 }
137 template<class T>
138 bool SeqList<T>::Insert(int i,T& x)
139 {
140     if(last==maxSize-1)
141        return false;
142     if(i<0||i>last+1)
143       return false;
144     for(int j=last;j>=i;j--)
145     {
146         data[j+1]=data[j];
147     }
148     data[i]=x;
149     last++;
150     return true;
151
152 }
153 template<class T>
154 bool SeqList<T>::Remove(int i,T& x)
155 {
156     if(last==-1)
157        return false;
158     if(i<0||i>last+1)
159       return false;
160     x=data[i];
161     for(int j=i+1;j<last;j++)
162     {
163         data[j-1]=data[j];
164     }
165
166     last--;
167     return true;
168 }
169 template<class T>
170 void SeqList<T>::input()
171 {
172     while(1)
173         {
174                 cin>>last;
175                 if(last<=maxSize-1)
176                         break;
177
178         }
179         for(int i=0;i<last;i++)
180               cin>>data[i];
181 }
182 template<class T>
183 void SeqList<T>::output()
184 {
185
186     cout<<"{ " ;
187     for(int i=0;i<last;i++)
188     cout<<data[i]<<" ";
189     cout<<"}";
190
191 }
192 template<class T>
193 SeqList<T> SeqList<T>::operator=(SeqList<T>& L)
194 {
195     return *this;
196 }
197 ///////////////////////////////////////////////////////////////////////

#include<iostream>//本线性表的last为个数,例如last为5,线性表值从0-4
#include<cstdlib>

const int defaultsize = 100;

using namespace std;

template<class T>
class SeqList
{
protected:

T *data;
int maxSize;
int last;
void reSize(int newSize);

public:
SeqList(int sz = defaultsize);
SeqList(SeqList<T>& L);
~SeqList(){delete[] data;}
int size()const{return maxSize;}
int Length()const{return last+1;}
int search(T& x)const;
int Locate(int i)const;
bool getData(int i,T& x)const
{
if(i>0&&i<=last+1)
{
x=data[i-1];
return true;
}
else
return false;
}
void setData(int i,T& x)const
{
if(i>0&&i<=last+1)
data[i-1]=x;
}
bool Insert(int i,T& x);
bool Remove(int i,T& x);
bool IsEmpty()
{
return (last ==-1)?true:false;

}
bool IsFull()
{
return(last==-1)?true:false;

}
void input();
void output();
SeqList<T>operator=(SeqList<T>& L);
friend void deletemin(SeqList<int>& s);

};
template<class T>
void SeqList<T>::reSize(int newSize)
{
if(newSize!=maxSize)
{
T *newarray = new T[newSize];
if(newarray ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
int n=last+1;
T*s =data;
T*d=newarray;
while(n--)
{
*d++=*s++;
}
delete []data;
data=newarray;
maxSize =newSize;
}
}
template<class T>
SeqList<T>::SeqList(int sz )
{

if(sz>0)
{
maxSize=sz;
last=-1;
data= new T[maxSize];
if(data ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
}

}
template<class T>
SeqList<T>::SeqList(SeqList<T>& L)
{
maxSize=L.size();
last=L.length()-1;
data =new T[maxSize];
if(data ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
T value;
for(int i=1;i<=last+1;i++)
{
L.getData(i,value);
data[i-1]=value;
}

}
template<class T>
int SeqList<T>::search(T& x)const
{
for(int i=0;i<=last;i++)
{
if(data[i]==x)
return i+1;
return 0;
}
}
template<class T>
int SeqList<T>::Locate(int i)const
{
if(i>=1&&i<=last+1)
return i;
else
return 0;

}
template<class T>
bool SeqList<T>::Insert(int i,T& x)
{
if(last==maxSize-1)
return false;
if(i<0||i>last+1)
return false;
for(int j=last;j>=i;j--)
{
data[j+1]=data[j];
}
data[i]=x;
last++;
return true;

}
template<class T>
bool SeqList<T>::Remove(int i,T& x)
{
if(last==-1)
return false;
if(i<0||i>last+1)
return false;
x=data[i];
for(int j=i+1;j<last;j++)
{
data[j-1]=data[j];
}

last--;
return true;
}
template<class T>
void SeqList<T>::input()
{
while(1)
{
cin>>last;
if(last<=maxSize-1)
break;

}
for(int i=0;i<last;i++)
cin>>data[i];
}
template<class T>
void SeqList<T>::output()
{

cout<<"{ " ;
for(int i=0;i<last;i++)
cout<<data[i]<<" ";
cout<<"}";

}
template<class T>
SeqList<T> SeqList<T>::operator=(SeqList<T>& L)
{
return *this;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

以上线性表的maxSize为线性表的大小,而last是线性表中有值的个数

时间: 2024-12-17 21:03:35

线性表基本类的实现的相关文章

关于操作符,线性表,优先级应该注意的东西

继昨天自学中应该注意的事项之后,今天再来聊一下java中容易出现的基本问题吧. 首先基本类型和它的包装类我就不多说了,但是值得注意的是String,首先它并不是基本类型,其次它被定义为final类型(也就是说不可集成),为什么要把String定义为final ?,网上也有很多答案,比较好的答案是:主要是为了"效率" 和 "安全性" 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final. 再来说一下用S

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.

数据导论——线性表

线性表是一种线性结构,由n个数据元素组成的又穷序列,数据元素又称为节点,线性表中的每个数据元素的含义,在不同的应用中各不相同,但在同一个线性表中的数据元素具有相同的特性. 下面的图总结了第二章的主要内容,用于总结和回想,巩固学习: 线性表的基本运算包括:初始化.求表长.读表元素.定位.插入.删除等基本运算,不同的存储结构实现细节可能不同. 在线性表的存储方式有顺序存储和链式存储. 顺序存储的存储方式是最简单的,逻辑顺序对应于存储顺序,数组就是顺序表的表现之一.顺序存储的运算包括插入.删除和定位,

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

数据结构和算法学习总结04 线性表---栈

栈 栈(Stack)是特殊的线性表,是只允许在一端进行插入和删除的线性表. 允许插入和删除的叫栈顶,反之则是栈底. 栈的插入称为进栈,删除称为出栈. 特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out). 因为栈是线性表,所以也有顺序表和链表两种形式,一般我们常用顺序表. 从代码中可以看出:与顺序表相比实际上就是插入和删除操作发生了改变. #include <iostream> using namespace std; const int Stack_S

大话数据结构---顺序存储结构的线性表

线性表的定义:零个或多个数据元素的有限序列. 定义的解读: 首先是由一组数据元素组成,可以基本数据类型,也可以使自定义的类型, 有限的个数,当然可以是0个,也就是空表呗, 还有一个特点就是有序 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继. 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段地址连续的存储单元依次存储线性表的数据元素: 这么一看线性表挺像数