线性表之单链表C++实现(2)

//实现单链表按位查找,返回指定位置的元素
template<class DataType>
DataType LinkedList<DataType>::GetElement(int index)
{
  //定义工作指针
  Node<DataType> *p = first->next;
  //定义计数器,初始值是1
  int count = 1;
  //查找序号所对应的位置
  while (p != NULL&&count < index)
  {
    //工作指针后移
    p = p->next;
    //计数器加1
    count++;
  }
  //如果找到单链表的末尾,还找不到指定的位置,则抛出异常
  if (p == NULL)
  {
    throw "查找的位置有误";
  }
  else
  {
    //当找到合适的位置时,返回该位置上的元素
    return p->data;
  }

}

//实现获取单链表的长度
template<class DataType>
int LinkedList<DataType>::GetLength()
{
  //定义计数器,用来计算单链表的长度
  int count = 0;
  //定义工作指针
  Node<DataType> *p = first->next;
  while (p != NULL)
  {
    p = p->next;
    count++;
  }
  return count;

}

//实现单链表的按序号输出元素
template<class DataType>
void LinkedList<DataType>::PrintLinkedList()
{
  //声明工作指针
  Node<DataType> *p;
  //初始化工作指针
  p = first->next;
  while(p != NULL)
  {
    cout << p->data << " ";
    //工作指针向后移动
    p = p->next;
  }
  cout << endl;
}

//实现单链表的删除
template<class DataType>
DataType LinkedList<DataType>::Delete(int index)
{
  Node<DataType> *p = first->next;
  int count = 0;
  //查找第 index-1 位置结点
  while (p != NULL&&count < index - 1)
  {
    p = p->next;
    count++;
  }
  //如果能找到
  if (p == NULL || p->next == NULL)
  {
    throw "删除的位置有误";
  }
  else
  {
    Node<DataType> *q = p->next;
    DataType x = q->data;
    p->next = q->next;
    delete q;
    return x;
  }
}

 二、测试线性表之单链表的源文件:TestLinkedList.cpp

#include<iostream>
#include "LinkedList.h"
using namespace std;
void show()
{
  cout << "---------------------------------------" << endl;
}
int main()
{
  int array[] = { 1, 3, 5, 2, 7, 6, 9, 8, 10, 4};
  //声明单链表
  LinkedList<int> linkedList = LinkedList<int>(10,array);
  cout << "输出单链表:" << endl;
  linkedList.PrintLinkedList();
  show();
  cout << "单链表的长度:" << linkedList.GetLength() << endl;
  cout << "单链表中第5个元素是:" << linkedList.GetElement(5) << endl;
  cout << "单链表中元素5的位置是:" << linkedList.GetLocal(5) << endl;
  show();
  cout << "在单链表的第5个位置上插入元素22" << endl;
  linkedList.Insert(5, 22);
  cout << "输出单链表:" << endl;
  linkedList.PrintLinkedList();
  cout << "单链表的长度:" << linkedList.GetLength() << endl;
  show();
  cout << "删除第5位置的元素" << endl;
  linkedList.Delete(5);
  cout << "输出单链表:" << endl;
  linkedList.PrintLinkedList();
  cout << "单链表的长度:" << linkedList.GetLength() << endl;
  show();
  return 0;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/89fbc1b4a4d6c52e6c5a634f8ea3549e.html