数据结构:顺序表(C++实现)

 1 头文件 SeqList.h

//SeqList.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cassert>
using namespace std;
class SeqList
{
public:
	//初始化
	SeqList();
	//销毁
	~SeqList();
	//头插
	void PushFront(int data);
	//头删
	void PopFront();
	//尾插
	void PushBack(int data);
	//尾删
	void PopBack();
	//打印
	void Print();
	//寻找
	int* Find(int data);
	//插入
	void Insert(int pos, int data);
	//清除
	void Erase(int data);
	//检查容量
	void Check();
private:
	//动态数组
	int* ptr;
	//数组索引
	int index;
	//数组容量
	int capacity;
};

2 源文件

2.1 SeqList.cpp(函数)

//SeqList.cpp
#include "SeqList.h"
//练习顺序表
//初始化
SeqList::SeqList():ptr(nullptr)	//创建变量时即给指针赋值为空指针
{
	index = 0;
	capacity = 0;
}
//销毁
SeqList::~SeqList()
{
	if (ptr!=nullptr)
	{
		delete[]ptr;
		ptr = nullptr;
		capacity = 0;
		index = 0;
		cout << "~SeqList Destroyed" << endl;
	}
}
//头插
void SeqList::PushFront(int data)
{
	Check();
	for (int i = index - 1; i >= 0; i--)
	{
		ptr[i + 1] = ptr[i];
	}
	ptr[0] = data;
	index++;
}
//头删
void SeqList::PopFront()
{
	for (int i = 1; i < index; i++)
	{
		ptr[i - 1] = ptr[i];
	}
	index--;
}
//尾插
void SeqList::PushBack(int data)
{
	Check();
	assert(ptr);
	ptr[index++] = data;
}
//尾删
void SeqList::PopBack()
{
	assert(index >= 0);
	index--;
}
//打印
void SeqList::Print()
{
	for (int i = 0; i < index; i++)
	{
		cout << ptr[i] << " ";
	}
	cout << endl;
}
//寻找
int* SeqList::Find(int data)
{
	for (int i = 0; i < index; i++)
	{
		if (ptr[i] == data)
		{
			return ptr + i;
		}
	}
	return nullptr;
}
//插入
void SeqList::Insert(int pos, int data)
{
	assert(pos > 0);
	Check();
	for (int i = index - 1; i >= pos - 1; i--)
	{
		ptr[i + 1] = ptr[i];
	}
	ptr[pos-1] = data;
	index++;
}
//清除
void SeqList::Erase(int data)
{
	int flag = 1;
	for (int i = 0; i < index; i++)
	{
		if (ptr[i] == data)
		{
			for (int j = i; j <index; j++)
			{
				ptr[j] = ptr[j + 1];
			}
			index--;
			flag = 0;
		}
	}
	if (flag)
	{
		cout << "该元素不存在" << endl;
	}
}
//检查容量
void SeqList::Check()
{
	if (ptr == nullptr || index == capacity)
	{
		int new_capcaity = (ptr == nullptr ? 4 : capacity * 2);
		//转移数据
		if (capacity != new_capcaity && capacity != 0)
		{
			int* temp = new int[new_capcaity];
			for (int i = 0; i < index; i++)
			{
				temp[i] = ptr[i];
			}
			delete[] ptr;
			ptr = temp;
			assert(ptr);
			capacity = new_capcaity;
			return;
		}
		ptr = new int[new_capcaity];
		capacity = new_capcaity;
		assert(ptr);
	}
}

2.2 test.cpp(测试,入口)

//test.cpp
#include"SeqList.h"
int main()
{
	SeqList a;
	a.PushBack(1);
	a.PushBack(2);
	a.PushBack(3);
	a.PushBack(4);
	a.PushBack(5);
	a.PushBack(6);
	a.PushBack(1);
	a.Print();
	a.PopBack();
	a.PopBack();
	a.PopBack();
	a.PopBack();
	a.Print();
	a.PushFront(1);
	a.PushFront(2);
	a.PushFront(9);
	a.Print();
	a.PopFront();
	a.Print();
	a.Insert(3, 7);
	cout<<a.Find(2)<<endl;
	cout<<a.Find(8)<<endl;
	a.Print();
	a.Insert(1, 8);
	a.Print();
	a.Erase(1);
	a.Print();
	a.Erase(1);
	return 0;
}

相关推荐

  1. 数据结构顺序C++实现

    2024-03-11 00:16:01       25 阅读
  2. 数据结构实现顺序

    2024-03-11 00:16:01       30 阅读
  3. 数据结构顺序实现C语言)

    2024-03-11 00:16:01       11 阅读
  4. 数据结构 模拟实现ArrayList顺序

    2024-03-11 00:16:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 00:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 00:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 00:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 00:16:01       20 阅读

热门阅读

  1. QML 3D入门知识路线

    2024-03-11 00:16:01       20 阅读
  2. 1672.最富有的客户的资产总量

    2024-03-11 00:16:01       19 阅读
  3. ArrayLIst和linkedlist的区别

    2024-03-11 00:16:01       23 阅读
  4. Linux acl权限

    2024-03-11 00:16:01       25 阅读
  5. (力扣题库)跳跃游戏II(C++)

    2024-03-11 00:16:01       18 阅读
  6. 力扣爆刷第90天之hot100五连刷36-40

    2024-03-11 00:16:01       23 阅读
  7. Android 中为什么要使用 Binder 机制?

    2024-03-11 00:16:01       17 阅读
  8. Docker入门简介

    2024-03-11 00:16:01       18 阅读
  9. HTML知识点

    2024-03-11 00:16:01       24 阅读
  10. gitlab仓库迁移

    2024-03-11 00:16:01       17 阅读