- Node.h头文件
- #pragma once
- class Node
- {
- private:
- //结点的字符
- char data;
- public:
- //无参数构造函数
- Node();
- //有参数构造函数
- Node(char data);
- //更改结点的字符
- void setData(char data);
- //获取结点的字符
- char getData();
- //析构函数
- ~Node( );
- };
- Node.cpp文件
- #include "stdafx.h"
- #include "Node.h"
- //无参数构造函数
- Node::Node( )
- {
- this->data='0';
- }
- //有参数构造函数
- Node::Node(char data)
- {
- this->data=data;
- }
- //更改结点的字符
- void Node::setData(char data)
- {
- this->data=data;
- }
- //获取结点的字符
- char Node::getData()
- {
- return this->data;
- }
- //析构函数
- Node::~Node( )
- {
- }
- SqList.h头文件
- #include "Node.h"
- #pragma once
- class SqList
- {
- private:
- //线性表当前存储的结点数
- int currentNum;
- //线性表可以存储结点的最大数量
- int MAX;
- //存储结点的数组
- Node *list;
- public:
- //构造函数,初始为数组大小为max的数组
- SqList(int max);
- //判断线性表是否为空
- bool isEmpty();
- //获取数组当前存储结点的个数
- int getCurrentNum();
- //判断线性表是否已满
- bool isFull();
- //在线性表的末尾添加结点node
- void addNode(Node node);
- //向线性表的第position处,添加结点node
- void insertNode(Node node,int position);
- //删除线性表第position处的结点
- void deleteNode(int position);
- //更改线性表的第position处的结点
- void updateNode(Node node,int position);
- //获取线性表第position处的结点
- Node getNode(int position);
- //在线性表中查询是否存在结点node,如果存在则返回在线性表第一次出现的位置,否则返回-1
- int query(Node node);
- //显示线性表的所有结点
- void printAllNodes();
- //析构函数
- ~SqList( );
- };
- SqList.cpp文件
- #include "stdafx.h"
- #include "SqList.h"
- #include<iostream>
- using namespace std;
- //构造函数,初始为数组大小为max的数组
- SqList::SqList(int max)
- {
- this->currentNum=0;
- this->MAX=max;
- list=new Node[this->MAX];
- }
- //获取数组当前存储结点的个数
- int SqList::getCurrentNum()
- {
- return this->currentNum;
- }
- //判断线性表是否为空
- bool SqList::isEmpty()
- {
- bool empty=false;
- if (this->currentNum==0)
- {
- empty=true;
- }
- return empty;
- }
- //判断线性表是否已满
- bool SqList::isFull()
- {
- bool full=false;
- if (this->currentNum==this->MAX)
- {
- full=true;
- }
- return full;
- }
- //获取线性表第position处的结点
- Node SqList::getNode(int position)
- {
- bool empty=isEmpty();
- if (empty)
- {
- cout<<""<<endl;
- }
- if (position>this->MAX)
- {
- cout<<"获取的结点位置已经超出范围"<<endl;
- }
- return list[position];
- }
- //在线性表的末尾添加结点node
- void SqList::addNode(Node node)
- {
- bool full=isFull();
- if (full)
- {
- this->MAX=this->currentNum*2;
- Node *temp=new Node[this->MAX];
- int length=this->currentNum;
- for (int i = 0; i < length; i++)
- {
- temp[i]=list[i];
- }
- delete []list;
- list=temp;
- }
- list[this->currentNum]=node;
- this->currentNum++;
- }
- //向线性表的第position处,添加结点node
- void SqList::insertNode(Node node,int position)
- {
- bool full=isFull();
- if (position>this->MAX)
- {
- cout<<"插入结点的位置已经超出范围"<<endl;
- }else if(!full)
- {
- int length=this->currentNum;
- for (int i = length; i > position-1; i--)
- list[i]=list[i-1];
- list[position-1]=node;
- this->currentNum++;
- }
- }
- //删除线性表第position处的结点
- void SqList::deleteNode(int position)
- {
- list[position-1]=NULL;
- }
- //更改线性表的第position处的结点
- void SqList::updateNode(Node node,int position)
- {
- list[position-1]=node;
- }
- //在线性表中查询是否存在结点node,如果存在则返回在线性表第一次出现的位置,否则返回-1
- int SqList::query(Node node)
- {
- int currentNum=this->currentNum;
- int result=-1;
- char data=node.getData();
- for (int i = 0; i < this->MAX; i++)
- {
- if (data==list[i].getData())
- result= i+1;
- }
- return result;
- }
- //显示线性表的所有结点
- void SqList::printAllNodes()
- {
- int max=this->MAX;
- for (int i = 0; i < max; i++)
- {
- if( list[i].getData()!='0')
- {
- char temp=list[i].getData();
- cout<<" "<<temp;
- }
- }
- cout<<endl;
- }
- //析构函数
- SqList::~SqList( )
- {
- delete []list;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- //初始化线性表,大小为10
- SqList sq=SqList(10);
- //向线性表添加4个数字
- Node node=Node('1');
- sq.addNode(node);
- node=Node('2');
- sq.addNode(node);
- node=Node('3');
- sq.addNode(node);
- node=Node('4');
- sq.addNode(node);
- cout<<"向线性表添加1-4,初始化后的线性表:"<<endl;
- sq.printAllNodes();
- cout<<"线性表当前的结点数量:"<<sq.getCurrentNum()<<endl;
- sq.insertNode('7',9);
- cout<<"在线性表的第9个位置添加7后后的线性表:"<<endl;
- sq.printAllNodes();
- Node n=Node('4');
- cout<<"在线性表中查询结点4的位置:"<<sq.query(n)<<endl;
- cout<<"删除线性表中的第2个结点后的线性表:"<<endl;
- sq.deleteNode(2);
- sq.printAllNodes();
- cout<<"更改线性表中的第1个结点为9后的线性表:"<<endl;
- Node update=Node('9');
- sq.updateNode(update,1);
- sq.printAllNodes();
- return 0;
- }
- 程序运行截图如下: