您的位置:首页 > 编程语言 > C语言/C++

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

2016-05-29 22:50 627 查看
本文的内容主要是,利用c++写出顺序表,并对写出的代码进行测试,
主要实现的功能:实现对顺序表的增删查改,
要写的函数:构造函数,赋值运算符重载,析构函数。在编写代码过程中应注意到深浅拷贝问题。
下面是顺序表的类函数:
#pragma once

#include<iostream>
using namespace std;

typedef int DataType;

class SeqList
{
public:
SeqList();
SeqList(DataType *array, size_t size);
SeqList(const SeqList &s); //现代写法
SeqList &operator=(SeqList s);
~SeqList();
void PushBack(DataType x);
void PopBack();
void PushFount(DataType x);
void PopFount();
void Insert(size_t pos, DataType x);
void Erase(size_t pos);
int Find(DataType x);
void PrintSeqList();
void _CheekCapacity();

private:
DataType *_array;
size_t _size;
size_t _capaci;
};
上面列举了,顺序表类,和其中包含的函数。
接下来介绍这各个函数:
构造函数,有两个(函数重载):
),
_size(size),
_capaci(size)
{
memcpy(_array, array, sizeof(DataType)*size);
}
拷贝构造函数:(两个,分别是不同的拷贝方法)
//SeqList::SeqList(const SeqList& s)  //传统写法
//	:_array(new DataType[s._size]),
//	_size(s._size),
//	_capaci(s._size)
//{
//	memcpy(_array, s._array, sizeof(DataType)*_size);
//}

SeqList::SeqList(const SeqList &s) //现代写法
:_array(NULL)
{
SeqList temp(s._array, s._size);
swap(_array, temp._array);
_size = s._size;
_capaci = s._capaci;
}
赋值运算符重载:(两个,分别是不同的拷贝方法)
;
//		delete[]_array;
//		_array = temp;
//		_size = s._size;
//		_capaci = s._size;
//		memcpy(_array, s._array, sizeof(DataType)*_size);
//	}
//	return *this;
//}
析构函数:
[code]SeqList::~SeqList()
{
if (_array)
{
delete[] _array;
}
}
检查顺序表容量的函数:
void SeqList::_CheekCapacity()
{
if (_size >= _capaci)
{
_capaci = 2 * _capaci + 3;
_array = (DataType*)realloc(_array, _capaci*sizeof(DataType));
}
}
插入数据函数:(三个,分别是前插、后插、给定位置插入)
void SeqList::PushFount(DataType x)
{
_CheekCapacity();
for (int i = _size; i > 0; i--)
{
_array[i] = _array[i - 1];
}
_array[0] = x;
_size++;
}

void SeqList::PushBack(DataType x)
{
_CheekCapacity();
_array[_size] = x;
_size++;
}

void SeqList::Insert(size_t pos, DataType x)
{
_CheekCapacity();
if (pos<_size)
for (int i = _size; i > _size - pos; i--)
{
_array[i] = _array[i - 1];
}
_array[pos - 1] = x;
_size++;
}
删除数据函数(三个,分别是前删、后删、给定位置删除)
void SeqList::PopFount()
{
if (_size == 0)
{
cout << ]查找数据(返回此数据在顺序表中的位置)
int SeqList::Find(DataType x)
{
if (_size == 0)
{
cout << "空链表!" << endl;
}
for (int i = 0; i < _size; i++)
{
if (x == _array[i])
{
return i + 1;
}
}
return -1;
}[/code]还有一个函数就是打印链表,此部分是最直接的观察
 << ]

当然还有测试用例,主函数,
#include "SeqLinkList.h"

void Test1()   //顺序表测试
{
SeqList s1;  //前插
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
//s1.PopBack();
//s1.PopFount();
//s1.PushFount(4);
//s1.PushFount(1);
s1.Insert(3, 5);
//s1.Erase(3);
s1.Insert(3, 6);
cout << "s1 = ";
s1.PrintSeqList();
SeqList s2(s1);
cout << "拷贝构造  s2 = ";
s2.PrintSeqList();
SeqList s3;
s3 = s1;
cout << "赋值运算符重载  s3 = ";
s3.PrintSeqList();
//int let = s1.Find(6);
//cout << "6 是第"<<let <<"个数"<< endl;
}

int main()
{
Test1();
system("pause");
return 0;
}


小弟是初学者,如果哪位大神发现代码中有错误或需要改进的地方,请您指正,只有发现了自己的错误才能进步,谢谢

本文出自 “分享中进步” 博客,请务必保留此出处http://xmwen1.blog.51cto.com/10730069/1748210
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: