C++线性表的顺序存储结构设计与实现

线性表基本概念:线性表定义线性表示,零个或多个数据元素的集合。线性表中的数据元素之间是有顺序的,线性表中的数据元素个数是有限的,线性表中的数据元素的类型必须相同

数学定义线性表示:具有相同类型的N个数据元素的有限序列

性质:线性表的第一个元素只有一个后继.线性表的最后一个元素只有一个前驱.除首尾元素以外的其他他元素,既有前驱又有后继,线性表能够逐项访问和顺序存取.

线性表的操作

创建线性表

销毁线性表

清空线性表

将元素插入线性表

将元素从线性表中删除

获取线性表中每个位置的元素

获取线性表的长度。

线性表在程序中表现为一种特殊的数据类型,线性表的操作,在程序中的表现为一组函数

设计与实现

插入元素算法,判断线性表是否合法,判断插入位置是否合法。把最后一个元素到插入位置的元素后移一个位置,将新元素插入线性表长度加一

获取元素操作,判断线性表是否合法,判断位置是否合法,直接通过数组下标的方式获取元素,

删除元素算法:判断线性表是否合法,判断删除位置是否合法。将元素取出,将删除位置后的元素分别向前移动一个位置,线性表长度减一

优点和缺点:优点:无需为线性表中的逻辑关系增加额外的空间,可以快速地获取表中合法位置的元素。缺点插入和删除操作需要移动大量元素,当线性表长度变化较大时,难以确定储存空间的容量.

#include
#include
#include
#include"seqlist.h"//代码片段
typedef struct_tag_SequList
{
	int length;
    int capacity;
    unsigned int*node;

}TSequList;
//下面是核心的api函数实现
SequList*TSequList_Create(int capacity)
{
	TSequList*tmp = NULL;
	tmp = (TSequList*)malloc(sizeof(TSequList));
	if (tmp == NULL)
	{
		printf("func SequList_Create() err:%d
", ret);
		return -1;
	}
}
//根据capacity的大小分配节点的空间
tmp->node = (unsigned int*)malloc(sizeof(unsigned int*)*capacity);
if (tmp->node == NULL)
{
	ret=-2
	printf("func SequList_Create() err:malloc err%d
", ret);
	return NULL;
}
//清空链表 回到初始化状态
void SequList_Clear(Seqlist*list)
{
	SequList*tlist = NULL;
	if (list == NULL)
	{
		return;
	}
	tlist = (TSequList*)list;
return	tlist->length = 0;
}
void SequList_Capacity(Seqlist*list)
{
	SequList*tlist = NULL;
	if (list == NULL)
	{
		return;
	}
	tlist = (TSequList*)list;
	return tlist->Capacity;
}
typedef struct _Teacher
{

	int age;
	char name[64];
}Teacher;
void main()
{
	int ret = 0;
	SeqList*list = NULL;
	Teacher t1, t2, t3, t4, t5;
	t1.age = 31;
	t2.age = 32;
	t3.age = 33;
	t4.age = 34;
	t5.age = 35;
	
	list = SeqList_Create(10);

	if (list == NULL)
	{
		printf("func SeqList_Create() ret:%d
",ret);
		return;

	}
	ret = SeqList_Insert(list, (SquListNode*)&t1, 0);//头插法
	ret = SeqList_Insert(list, (SquListNode*)&t2, 0);
	ret = SeqList_Insert(list, (SquListNode*)&t3, 0);
	ret = SeqList_Insert(list, (SquListNode*)&t4, 0);
	ret = SeqList_Insert(list, (SquListNode*)&t5, 0);
	//遍历
	for (i= 0; i < SeqList_Lengh(list); i++)
	{
		Teacher*tmp = (Teacher*)SeqList_Get(list, i);
		if (tmp == NULL)
		{
			return;
		}
		printf("tmp->age:%d", tmp->age);
		//删除链表中的结点
		while (SeqList_Lengh(list)>0)

		{
			SeqList_Delete(list, pos);

		}

}
	system("pause");
	return;
}
展开阅读全文

页面更新:2024-05-18

标签:顺序   前驱   线性   结构设计   算法   函数   长度   元素   缺点   优点   定义   位置   类型   操作   数据   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top