线性表是一种最基本、最简单的数据结构,用来描述数据元素之间单一的前驱和后继关系。在现实生活中有很多应用。
线性表可分为顺序表和链式表。
顺序表有参构造函数定义:
template<typename T>
SeqList<T>::SeqList(T a[],int n)
{
if(n>MaxSize) throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
遍历操作
template<typename T>
void SeqList<T>::PrintList()
{
for(int i=0;i<length;i++)
cout<<data[i]<<'\n';
cout<<endl;
}
按位查找
template<typename T>
T SeqList<T>::Get(int i)
{
if(i<1 || i>length) throw"查找位置非法";
else return data[i-1];
}
按值查找
template<T>
int SeqList<T>::Locate(T x)
{
for(int i=0;i<length;i++)
if(data[i-1]==x) return i+1;
return 0;
}
插入操作
template<T>
void SeqList<T>::Insert(int i;T x)
{
if(length==MaxSize) throw"上溢";
if(i<1 || i>length+1) throw"插入位置错误";
for(int j=length ;j>=i;j--)
{
data[j]=data[j-1];
}
data[i-1]=x;
length++;
}
删除操作
template<T>
T SeqList<T>::Delete(int i)
{
T x;
if(length==0) throw"下溢";
if(i<1 || i>length) throw"删除位置错误";
x=data[i-1];
for(int j=i;j<length;j++)
{
data[j-1]=data[j];
}
length--;
return x;
}
单链表的构造:
结构节点
template<T>
struct Node
{
T data;
Node<T> *next;
}
单链表的初始化
template<T>
LinkList<T>::LinkList()
{
first=new Node<T>;
first->next=NULL;
}
遍历操作
template<T>
void LinkList<T>::PrintList()
{
Node<T> *p=first->next;
while(p!=NULL)
{
cout<<p->data<<'\n';
p=p->next;
}
cout<<endl;
}
求单链表的长度
template<T>
int LinkList<T>::Length()
{
Node<T> *p=first->next;
int count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}
按位查找
template<T>
T LinkList<T>::Get(int i)
{
Node<T> *p=first->next;
int count=1;
while(p!=NULL)
{
p=p->next;
count++;
}
if(p==NULL) throw"查找错误";
else return p->data;
}
按值查找
template<T>
int LinkList<T>::Locate(T x)
{
Node<T> *p=first->next;
int count=1;
while(p!=NULL)
{
if(p->data==x) return count;
p=p->next;
count++;
}
return 0;
}
插入操作
template
void LinkList::Insert(int i,T x)
{
Node *p=first->next;
int count=0;
while(p!=NULL && count<i-1)
{
p=p->next;
count++;
}
if(p==NULL) throw"插入位置错误";
else{
s=new Node;
s->data=x;
s->next=p->next;
p-next=s;
}
}
链式表在存储时不需要考虑存储元素的大小,在删除和插入元素时相对于顺序表来说时间复杂度较小
这章的内容为线性表,线性表是整本书的基础,学好这章很重要。
对于转专业的我来说,数据结构这本书真的特别难,但我一直在坚持学习,我相信我一定会学会学好。