第2章 线性表

   线性表是一种最基本、最简单的数据结构,用来描述数据元素之间单一的前驱和后继关系。在现实生活中有很多应用。
   线性表可分为顺序表和链式表。
   顺序表有参构造函数定义:
   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;
}
}
链式表在存储时不需要考虑存储元素的大小,在删除和插入元素时相对于顺序表来说时间复杂度较小

这章的内容为线性表,线性表是整本书的基础,学好这章很重要。
对于转专业的我来说,数据结构这本书真的特别难,但我一直在坚持学习,我相信我一定会学会学好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值