线性表基本概念:线性表定义线性表示,零个或多个数据元素的集合。线性表中的数据元素之间是有顺序的,线性表中的数据元素个数是有限的,线性表中的数据元素的类型必须相同
数学定义线性表示:具有相同类型的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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号