C++用数组实现的线性表




  1. Node.h头文件


  1. #pragma once
  2. class Node
  3. {
  4. private:
  5. //结点的字符
  6. char data;

  7. public:
  8. //无参数构造函数
  9. Node();
  10. //有参数构造函数
  11. Node(char data);
  12. //更改结点的字符
  13.     void setData(char data);
  14. //获取结点的字符
  15. char getData();
  16. //析构函数
  17. ~Node( );
  18. };

  1. Node.cpp文件

  1. #include "stdafx.h"
  2. #include "Node.h"

  3. //无参数构造函数
  4. Node::Node( )
  5. {
  6.       this->data='0';
  7. }

  8. //有参数构造函数
  9. Node::Node(char data)
  10. {
  11. this->data=data;
  12. }

  13. //更改结点的字符
  14. void Node::setData(char data)
  15. {
  16. this->data=data;
  17. }

  18. //获取结点的字符
  19. char Node::getData()
  20. {
  21. return this->data;
  22. }

  23. //析构函数
  24. Node::~Node( )
  25. {
  26. }

  1. SqList.h头文件

  1. #include "Node.h"

  2. #pragma once

  3. class SqList
  4. {
  5. private:
  6. //线性表当前存储的结点数
  7. int currentNum;
  8. //线性表可以存储结点的最大数量
  9. int MAX;
  10. //存储结点的数组
  11. Node *list;
  12. public:
  13. //构造函数,初始为数组大小为max的数组
  14. SqList(int max);
  15. //判断线性表是否为空
  16. bool isEmpty();
  17. //获取数组当前存储结点的个数
  18. int getCurrentNum();
  19. //判断线性表是否已满
  20. bool isFull();
  21. //在线性表的末尾添加结点node
  22. void addNode(Node node);
  23. //向线性表的第position处,添加结点node
  24. void insertNode(Node node,int position);
  25. //删除线性表第position处的结点
  26. void deleteNode(int position);
  27. //更改线性表的第position处的结点
  28. void updateNode(Node node,int position);
  29. //获取线性表第position处的结点
  30. Node getNode(int position);
  31. //在线性表中查询是否存在结点node,如果存在则返回在线性表第一次出现的位置,否则返回-1
  32. int query(Node node);
  33. //显示线性表的所有结点
  34. void printAllNodes();
  35. //析构函数
  36. ~SqList( );
  37. };

  1. SqList.cpp文件
  2. #include "stdafx.h"
  3. #include "SqList.h"
  4. #include<iostream>


  5. using namespace std;


  6. //构造函数,初始为数组大小为max的数组
  7. SqList::SqList(int max)
  8. {
  9. this->currentNum=0;
  10. this->MAX=max;
  11. list=new Node[this->MAX];
  12. }


  13. //获取数组当前存储结点的个数
  14. int SqList::getCurrentNum()
  15. {
  16. return this->currentNum;
  17. }


  18. //判断线性表是否为空
  19. bool SqList::isEmpty()
  20. {
  21. bool empty=false;
  22. if (this->currentNum==0)
  23. {
  24. empty=true;
  25. }
  26. return empty;
  27. }


  28. //判断线性表是否已满
  29. bool SqList::isFull()
  30. {
  31. bool full=false;
  32. if (this->currentNum==this->MAX)
  33. {
  34. full=true;
  35. }
  36. return full;
  37. }


  38. //获取线性表第position处的结点
  39. Node SqList::getNode(int position)
  40. {
  41. bool empty=isEmpty();
  42. if (empty)
  43. {
  44. cout<<""<<endl;
  45. }
  46. if (position>this->MAX)
  47. {
  48. cout<<"获取的结点位置已经超出范围"<<endl;
  49. }
  50. return list[position];
  51. }


  52. //在线性表的末尾添加结点node
  53. void SqList::addNode(Node node)
  54. {
  55. bool full=isFull();
  56. if (full)
  57. {
  58. this->MAX=this->currentNum*2;
  59. Node *temp=new Node[this->MAX];
  60. int length=this->currentNum;
  61. for (int i = 0; i < length; i++)
  62. {
  63. temp[i]=list[i];
  64. }
  65. delete []list;
  66. list=temp;
  67. }
  68. list[this->currentNum]=node;
  69.    this->currentNum++;
  70. }


  71. //向线性表的第position处,添加结点node
  72. void SqList::insertNode(Node node,int position)
  73. {
  74. bool full=isFull();
  75. if (position>this->MAX)
  76. {
  77. cout<<"插入结点的位置已经超出范围"<<endl;
  78. }else if(!full)
  79. {
  80. int length=this->currentNum;
  81. for (int i = length; i > position-1; i--)
  82. list[i]=list[i-1];
  83. list[position-1]=node;
  84. this->currentNum++;
  85. }
  86. }


  87. //删除线性表第position处的结点
  88. void SqList::deleteNode(int position)
  89. {
  90. list[position-1]=NULL;
  91. }


  92. //更改线性表的第position处的结点
  93. void SqList::updateNode(Node node,int position)
  94. {
  95. list[position-1]=node;
  96. }


  97. //在线性表中查询是否存在结点node,如果存在则返回在线性表第一次出现的位置,否则返回-1
  98. int SqList::query(Node node)
  99. {
  100. int currentNum=this->currentNum;
  101. int result=-1;
  102. char data=node.getData();
  103. for (int i = 0; i < this->MAX; i++)
  104. {
  105. if (data==list[i].getData())
  106. result= i+1;
  107. }
  108. return result;
  109. }


  110. //显示线性表的所有结点
  111. void SqList::printAllNodes()
  112. {
  113. int max=this->MAX;
  114. for (int i = 0; i < max; i++)
  115. {
  116. if( list[i].getData()!='0')
  117. {
  118. char temp=list[i].getData();
  119. cout<<" "<<temp;
  120. }
  121. }
  122. cout<<endl;
  123. }


  124. //析构函数
  125. SqList::~SqList( )
  126. {
  127. delete []list;
  128. }


  129. int _tmain(int argc, _TCHAR* argv[])
  130. {
  131. //初始化线性表,大小为10
  132. SqList sq=SqList(10);
  133. //向线性表添加4个数字
  134. Node node=Node('1');
  135. sq.addNode(node);
  136. node=Node('2');
  137. sq.addNode(node);
  138. node=Node('3');
  139. sq.addNode(node);
  140.     node=Node('4');
  141. sq.addNode(node);


  142. cout<<"向线性表添加1-4,初始化后的线性表:"<<endl;
  143. sq.printAllNodes();


  144. cout<<"线性表当前的结点数量:"<<sq.getCurrentNum()<<endl;


  145. sq.insertNode('7',9);
  146. cout<<"在线性表的第9个位置添加7后后的线性表:"<<endl;
  147. sq.printAllNodes();
  148. Node n=Node('4');
  149. cout<<"在线性表中查询结点4的位置:"<<sq.query(n)<<endl;


  150. cout<<"删除线性表中的第2个结点后的线性表:"<<endl;
  151. sq.deleteNode(2);
  152. sq.printAllNodes();


  153. cout<<"更改线性表中的第1个结点为9后的线性表:"<<endl;
  154. Node update=Node('9');
  155. sq.updateNode(update,1);
  156. sq.printAllNodes();
  157. return 0;
  158. }

  1. 程序运行截图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值