数据结构(顺序表)-线性表

文章展示了如何使用C++的结构体和类来实现线性表的基本操作,包括初始化、判断表是否为空或满、求表长、查找元素、插入和删除节点。提供了两种实现方式,一种是基于结构体,另一种是基于模板类。
摘要由CSDN通过智能技术生成
  1. 基本运算:

                  (1)初始化

                  (2)判断表是否为空 (表结点个数是否为零)

                  (3)判断表是否为满 (表结点数是否为最大允许个数)

                  (4)求表长(结点数)

                  (5)取表中第i个结点数

                  (6)查找表中值为x的结点

                  (7)表中第i个位置插入结点

                  (8)删除表中的第i个位置结点

        2.结构体的方式表示线性表

线性表(结构体)

#include <iostream>
#include <fstream>
using namespace std;

struct LinearList
{
	int* data; 		//线性表以数组方式
	int MaxSize;	//表示控制最大范围
	int count;		//表当前结点,即表长
};

void initList(LinearList* L,int sz)//创建列表,初始化
{
	L->MaxSize = sz;
	L->count = 0;
	L->data = new int[sz];
}

void FreeList(LinearList* L)//清除列表
{
	delete L->data;
	//free[L->data];
}

bool ListFull(LinearList* L)//判断满
{
	return L->count = L->MaxSize ? true : false;
}

bool ListEmpty(LinearList* L)//判断空
{
	if (L->count == 0)
		return true;
	return false;
}

int ListLength(LinearList* L)//长度
{
	return L->count;
}

int LocateElem(LinearList* L, int x)//取表中第i个结点数
{
	for (int i = 0; i < L->count; i++)
		if (L->data[i] == x)
			return L->data[i];
	return -1;
}

bool InsertElem(LinearList*L, int i,int x)//插入结点
{
	if(i < 0 || i > L->MaxSize || L->count == L->MaxSize)
	{
		return false;
	}
	else
	{
		for(int j = L->count; j > i; j--)
		{
			L->data[j] = L->data[j - 1];
		}
		L->data[i] = x;
		L->count++;
		return true;
	}
}


bool DeleteElem(LinearList* L,int i)//删除结点
{
	if(i < 0 || i > L->count || L->count == 0)
	{
		return false;
	}
	else
	{
		for(int j = i; j < L->count-1; j--)
		{
			L->data[j] = L->data[j+1];
		}
		L->count--;
		return true;
	}
}


int main()
{
	LinearList L;
	int sz;
	cin >> sz;
	initList(&L,sz);
	InsertElem(&L, 0, 3);
	cout << L.data[0];
    return 0;
}

3、类的方式实现线性表

线性表(类)

#include <iostream>
#include <fstream>
using namespace std;

template <class T>
class LinearList
{
private:
	T * data;
	int MaxSize;
	int count;	
public:
	LinearList(int sz)	//初始化
	{
		MaxSize = sz;
		count = 0;
		data = new int[sz];
	}
	~LinearList()//析构函数
	{
		delete []data;
	}
	bool ListFull()//判断满
	{
		return count = MaxSize ? true : false;
	}
	bool ListEmpty()//判断空
	{
		return (count <= 0) ? true : false;
	}
	int ListLength()//长度为私有变量所以要单独设置函数来求它的长度。
	{	
		return count;
	}
	T Get(int i)//求第i个结点的值
	{
		return (i < 0 || i >= count ? NULL : data[i]);
	}
	int Locate(T &x)
	{
		for(int i = 0; i < count; i++)
		{
			if(data[i] == x)
				return i;
		}
		return -1;//查找失败
	}
	bool Insert(T x, int i)//第i个位置插入值为x的结点
	{
		if(i < 0 || i > count || count == MaxSize)
			return false;
		else
		{
			for(int j = count; j > i; j--)
			{
				data[j] = data[j - 1];
			}
			data[i] = x;
			count++;
			return true;
		}
	}
	bool Delete(int i)
	{
		if(i < 0 || i >= count || count == 0)
			return false;
		else
		{
			for(int j = i; j < count - 1; j++)
			{
				data[j] = data[j + 1];
			}
			count--;
			return true;		
		}	
	}
	
};

int main()
{
	LinearList<int> s1(100);
	s1.Insert(5,0);
	cout << s1.Get(0);	
	return 0;

    return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值