C++实现数据结构——线性表

         因为要写作业,所以写了一个,非常非常简单基础易懂的线性表,网上线性表的代码挺多的,但是好多都写的比较复杂。个人感觉,我这个线性表的结构定义,可以说是极致简化版。很适合小白阅读啊。

          链表结构,不多说,举个例子吧:它就像一条曲别针扣成的链子,可以在指定位置断开加点曲别针,也可以根据曲别针的颜色得到该曲别针的位置(曲别针的颜色不唯一)。

代码文件结构如下:

 C++实现数据结构——线性表_第1张图片

        头文件内定义一下链表所需要得的结构,然后声明它的一系列函数,增删改查什么的。

       管理一个简单的链表,三个元素就够了:1.容量、2.当前元素个数、3.存储的数据,链表的关键点就在于第三个元素,采用的是指针,进行动态管理。

        下面我们来看一下代码啊,都是比较简单的东西:

#pragma once
#include
#define SEQLIST_INIT_SIZE  10;;
#define SeqList_h
using namespace std;

typedef int Data;

class SeqList
{
public:
	SeqList* initSeqList(SeqList* list);

	void push_back(SeqList* list, Data val);

	void insert(SeqList* list, int pos, Data val);
	bool empty(SeqList* list);
	void earse(SeqList* list, int pos);
	void show(SeqList* list);
	void showLen(SeqList* list);
	int find(SeqList* list, Data val);
	Data at(SeqList* list, int pos);
	~SeqList();
private:
	int capacity;//容量;
	int size;//当前元素个数;
	Data* base;//指向动态内存分配的空间的指针;
};

 然后写了一个.cpp文件来写这些函数的具体内容:

//初始化顺序表;
SeqList* SeqList::initSeqList(SeqList* list)
{
	list->capacity = SEQLIST_INIT_SIZE;
	list->size = 0;
	list->base = (Data*)calloc(1, sizeof(Data));
	if (list->base == NULL)
		return NULL;
	return list;
}

//在链表末尾插入元素;
void SeqList::push_back(SeqList* list, Data val)
{
	//如果没有存满元素
	if (list->size < list->capacity)
	{
		list->base[list->size] = val;
		list->size++;
	}
	else
	{
		printf("顺序表已满,无法插入");
	}
};
//在链表中间插入元素;
void SeqList::insert(SeqList* list, int pos, Data val)
{
	for (int i = list->size; i > pos; i--)
	{
		list->base[i] = list->base[i - 1];
	}
	list->base[pos] = val;
	list->size++;
};
//判断链表是否为空;
bool  SeqList::empty(SeqList* list)
{
	return list->size == 0;
}
//删除指定位置的元素,pos是下标;
void  SeqList::earse(SeqList* list, int pos)
{
	if (empty(list))
		return;
	list->size--;
	for (int i = pos; i < list->size; i++)
	{
		list->base[i] = list->base[i + 1];
	}
}
//展示链表内容
void SeqList::show(SeqList* list)
{
	for (int i = 0; i < list->size; i++)
	{
		printf("%d", list->base[i]);
	}
	printf("\n");
}
//展示链表的长度;
void SeqList::showLen(SeqList* list)
{
	cout << "此时链表的长度为" << list->size << endl;
}
//查找
int SeqList::find(SeqList* list, Data val)
{
	for (int i = 0; i < list->size; i++)
	{
		if (list->base[i] == val)
		{
			return i;
		}
	}
}
//获取指定位置的元素
Data SeqList::at(SeqList* list, int pos)
{
	if (pos < 0 || pos >= list->size)
	{
		return -1;
	}

	return list->base[pos];
}
SeqList::~SeqList()
{
}

 最后就是主函数调用:

#include"SeqList.h"

int main(){

	SeqList ls;

	ls.initSeqList(&ls);

	//插入0、1、2、3、4、5这几个元素;
	for (int i = 0; i < 5; i++)
	{
		ls.push_back(&ls, i);
	}
	cout << "初始链表的元素为:" << endl;
	ls.show(&ls);
	ls.showLen(&ls);
	cout << endl;

	cout << "在下标为3的位置插入元素8后的链表元素为:" << endl;
	ls.insert(&ls, 3, 8);
	ls.show(&ls);
	ls.showLen(&ls);
	cout << endl;

	cout << "删除下标为3的元素后,链表元素为:" << endl;
	ls.earse(&ls, 2);
	ls.show(&ls);
	ls.showLen(&ls);
	cout << endl;

	cout << "按值查询" <

 运行结果如下:

C++实现数据结构——线性表_第2张图片

         链表插入——当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。

        若要删除第i个元素,就只需要把第i个元素之后的所有元素前移一个位置,也就是说第i+1个元素,取代第i个元素。

你可能感兴趣的:(数据结构,c++,数据结构,链表)