C++ 实现静态链表的简单实例

C++ 实现静态链表的简单实例

用数组描述的链表,即称为静态链表。

在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur。

这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。

下图表示了静态链表的一中存储结构:

C++ 实现静态链表的简单实例_第1张图片

图中用彩色途上的是两个头结点,不存放数据,分别用来记录第一个备用节点和第一个数据节点的下标。
下面给出静态链表的C++实现代码:

首先给出头文件:StaticList.h:

#include
#include
using namespace std;

#define MAXSIZE 20    // 静态链表(数组)默认长度
#define ElemType int   // 值类型

class StaticList;

//节点类
typedef class StaticListNode  // 静态链表的节点类型(数组元素类型)
{
  friend class StaticList;
private:
  ElemType data;       // 值域
  int   cur;        // 游标 (指示当前节点的下一个元素下标)
}StaticListNode;


// 静态链表类
class StaticList
{
public:
  StaticList()
  {
    for(int i = 2; i 
 

下面是测试代码:Main.cpp

#include"StaticList.h"

void main()
{
  StaticList SL;

  StaticList SL1;  //测试merge()
  StaticList SL2;

  SL1.push_back(1);
  SL1.push_back(9);
  SL1.push_back(0);
  SL1.push_back(6);
  SL1.push_back(999);

  SL2.push_back(5);
  SL2.push_back(8);
  SL2.push_back(100);

  ElemType Item = 0;
  int select = 1;
  while(select)
  {
    cout<<"********************************************"<>select;
    switch(select)
    {
    case 1:
      cout<<"输入要尾插的数据:(-1结束)>";
      while(cin>>Item && -1 != Item)
        SL.push_back(Item);
      break;

    case 2:
      cout<<"输入要头插的数据:(-1结束)>";
      while(cin>>Item && -1 != Item)
        SL.push_front(Item);
      break;

    case 3:
      SL.show_list();
      break;
    case 4:
      SL.pop_back();
      break;

    case 5:
      SL.pop_front();
      break;

    case 6:
      cout<<"输入要插入的数据:>";
      cin>>Item;
      SL.insert_val(Item);
      break;

    case 7:
      cout<<"链表长度为:"<";
      cin>>Item;
      SL.find(Item);
      break;

    case 9:
      SL.merge(SL1, SL2);
      break;

    case 10:
      cout<<"输入要删除的数据:>";
      cin>>Item;
      SL.delete_val(Item);
      break;

    case 11:
      SL.sort();
      break;

    case 12:
      SL.reserve();
      break;

    case 13:
      SL.next(0);
      break;

    case 14:
      SL.prio(0);
      break;

    case 15:
      SL.clear();
      break;

    case 16:
      SL.~StaticList();
      break;

    default:
      break;
    }
  }
}

下面是测试截图:

C++ 实现静态链表的简单实例_第2张图片

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

你可能感兴趣的:(C++ 实现静态链表的简单实例)