c++实现和c语言实现的区别
-
把结构体改为类
-
可以把类型改为模板类型
-
把函数写在类里面,创建顺序表的函数改为构造函数
-
少一个参数:类中的数据成员可以表示一个参数,在类中可以访问自己的数据成员,对自己的数据成员做修改
-
不需要判断sqlist是否为空,因为 sqlist 是一个对象,通过 curSize 判断是否为空即可
-
new一个对象 sqlist ,用对象的方式访问
-
释放对象,把对象指针置为空
sqlist.h
#pragma once
#pragma once
#include <iostream>
using namespace std;
#define MAX 10 //最大元素个数
typedef int DataType;
//结构体抽象---> 抽象长相
enum INFO { OK = 1, ERROR = -1 };
class Sqlist
{
public:
Sqlist(int MaxSize);
int size() const; //不会改变数据成员 加const修饰
int empty()const;
DataType getData(int index);
int insertSqlist(int index, DataType data);
void printSqlist();
int deleteSqlist( int index);
void push_front( DataType data); //头部插入
void pop_front();
void push_back(DataType data);
void pop_back();
int searchSqlist( DataType data);
void insert_sort(DataType data);
void destroySqlist();
protected:
DataType* dataMemory;
int maxSize;
int curSize;
};
sqlist.cpp
#include "sqlist.h"
Sqlist::Sqlist(int MaxSize)
{
//创建过程,就是初始化数据
curSize = 0;
maxSize = MaxSize;
//指针变成一个数组
dataMemory =new DataType[maxSize]; //不需要申请内存
}
int Sqlist::size() const
{
if (dataMemory == NULL)
return ERROR;
return curSize;
}
int Sqlist::empty() const
{
if (dataMemory == NULL)
return ERROR;
return curSize==0;
}
DataType Sqlist::getData(int index)
{
if (curSize == 0)
{
cout<<"sqlist is empty,unable to get......"<<endl;
return ERROR;
}
if (curSize < index)
{
//invalid 无效
cout << "index is invalid,unable to get......" << endl;;
return ERROR;
}
//index是第几个元素
return dataMemory[index - 1];
}
int Sqlist::insertSqlist(int index, DataType data)
{
//数组实现的数据结构:放进去需要考虑满
if (curSize == maxSize)
{
printf("sqlist is full,unbale to insert......\n");
return ERROR;
}
if (index == 0)
{
dataMemory[curSize++] = data;
return OK;
}
if (curSize < 1 || curSize < index)
{
printf("index is invalid,unable to insert......\n");
return ERROR;
}
#if 0
int pos = sqlist->curSize;
dataMemory[pos] = data; //插在最后面
while (pos != index)
{
DataType temp = dataMemory[pos];
dataMemory[pos] = dataMemory[pos - 1];
dataMemory[pos - 1] = temp;
pos--;
}
curSize++;
#endif
for (int k = curSize; k >= index; k--)
{
dataMemory[k] = dataMemory[k - 1];
}
dataMemory[index - 1] = data;
curSize++;
return OK;
}
void Sqlist::printSqlist()
{
if (curSize == 0)
{
cout << "sqlist is empty,unable to print......\n" << endl;
return;
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", dataMemory[i]);
}
printf("\n");
}
int Sqlist::deleteSqlist(int index)
{
if (curSize == 0)
{
cout<<"sqlist is empty,unable to delete......\n";
return ERROR;
}
if (curSize < index)
{
cout<<"index is invalid,unbale to delete......\n";
return ERROR;
}
for (int k = index - 1; k < curSize; k++)
{
dataMemory[k] = dataMemory[k + 1];
}
curSize--; //伪删除
return OK;
}
void Sqlist::push_front(DataType data)
{
insertSqlist(1, data);
}
void Sqlist::pop_front()
{
deleteSqlist(1);
}
void Sqlist::push_back(DataType data)
{
if (curSize == maxSize)
{
printf("sqlist is full,unable to pushback");
return;
}
dataMemory[curSize++] = data;
}
void Sqlist::pop_back()
{
deleteSqlist(curSize);
}
int Sqlist::searchSqlist(DataType data)
{
for (int i = 0; i < curSize; i++)
{
if (dataMemory[i] == data)
{
return i;
}
}
return ERROR;
}
void Sqlist::insert_sort(DataType data)
{
if (curSize ==maxSize)
{
cout<<"sqlist is full,unable to insert......\n";
return;
}
if (curSize == 0)
{
dataMemory[curSize++] = data;
}
dataMemory[curSize] = data;
for (int k = curSize; k > 0; k--)
{
if (dataMemory[k] < dataMemory[k - 1])
{
DataType temp = dataMemory[k];
dataMemory[k] = dataMemory[k - 1];
dataMemory[k - 1] = temp;
}
else
{
break;
}
}
curSize++;
}
void Sqlist::destroySqlist() //不需要传入二级指针
{
delete [] dataMemory; //只做了一次内存申请 做一次释放即可
dataMemory = nullptr;
}
test.cpp
#include "sqlist.h"
int main()
{
Sqlist *pSqlist=new Sqlist(MAX);
printf("test insert:\n");
pSqlist->insertSqlist( 0, 0); //0
pSqlist->insertSqlist( 1, 1); //1 0
pSqlist->insertSqlist( 1, 2); //2 1 0
pSqlist->insertSqlist( 1, 3); //3 2 1 0
pSqlist->insertSqlist( 4, 444);
pSqlist->printSqlist();
printf("test delete:\n");
pSqlist->deleteSqlist( 4);
pSqlist->printSqlist();
printf("test push and pop:\n");
pSqlist->push_front(666);
pSqlist->push_back(999);
pSqlist->printSqlist();
pSqlist->pop_front();
pSqlist->pop_back();
pSqlist->printSqlist();
int pos = pSqlist->searchSqlist(3);
printf("pos:%d\n", pos);
pSqlist->destroySqlist();
delete pSqlist; //释放对象
pSqlist = nullptr; //对象指针置为空
Sqlist sortSqlist(10);
sortSqlist.insert_sort(1); //对象的方式访问
sortSqlist.insert_sort(100);
sortSqlist.insert_sort(77);
sortSqlist.insert_sort(-1);
sortSqlist.printSqlist();
sortSqlist.destroySqlist();
return 0;
}