数据结构 --- c++实现顺序表

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;
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值