本人是一个大三的学生,最近在看数据结构,也是第一次写自己的博客,有错勿喷。可能在大学的学生都觉得数据结构是比较难的一门课程,也有许多难掌握的知识。但是在自己多次实践过后就感觉没有那么困难,还是很容易掌握的。
在学习过后我觉得数据结构的顺序存储就相当于数组,数组大家应该都不陌生吧。接下来我就给大家看一下我自己写的数据结构的顺序存储的代码
1、你必须要定义一个你顺序表要存储的数据类型 和你的顺序表的大小:
#define MaxSize 50
typedef int ElemType;
2、在定义了你顺序表的大小和数据类型后你就可以定义一个顺序表的存储结构:
typedef struct {
ElemType data[MaxSize];
int Length;
}sqlList;
3、做完了初始的工作就可以给你的顺序表分配空间了,我写了一个InitialList()函数来初始化
void InitialList(sqlList *&L)
{
L = (sqlList *)malloc(sizeof(sqlList));
L->Length = 0;
}
很好你的顺序表已经建好了,是不是感觉跟数组很像。相当于int L[50];。接下来就是对线性表的操作。在这里我要说一下对于&这个取地址符何时有,何时无。当你对你所操作的顺序表结构有影响的时候就可以用取地址符。如:插入了一个元素,删除一个元素等。当你仅仅只想获取他的一些信息就可以不用这个取地址符。如:获取他的元素,获取他的长度。
4、对线性的操作:
(1)摧毁线性表,直接把这段内存回收就可以了:
void DestroyList(sqlList *&L)
{
free(L);
}
(2)判断线性表是否为空,我们只需判断线性表的长度是否为0就可以了:
bool IsListEmpty(sqlList *L)
{
return (L->Length == 0);
}
(3)获取线性表的长度
int ListLength(sqlList *L)
{
return L->Length;
}
(4)输出线性表的长度,是不是感觉和数组一样:
条件:线性表是否为空
操作:在满足条件的时候才输出线性表
void DispList(sqlList *L)
{
if (IsListEmpty(L))
{
return;
}
for (int i = 0; i < L->Length; i++)
{
cout << L->data[i] << " ";
}
cout << endl;
}
(5)获取第线性表第i个位置上的元素,用e返回:
条件:所取的位置在1到线性表的长度之间(在这里说一下i是我们所说第几个,返回的是线性表的存储结构,所以要i-1)
bool GetLocationElement(sqlList *L, int i, ElemType &e)
{
if (i<1 || i>L->Length)
return false;
e = L->data[i-1];
return true;
}
(6)线性表中是否存在给定的元素如果存在返回元素的位置,不存在返回0
int Location(sqlList *L, ElemType e)
{
if (IsListEmpty(L))
return 0;
int i = 0;
while (i < L->Length && e != L->data[i])
i++;
if (i >= L->Length)
return 0;
else
{
return (i+1);
}
}
(7)接下来是比较麻烦的插入和删除一个元素
我先讲一下思路:插入元素主要是把第i个元素以及后面的元素往后面移动一个位置,这样原来第i个元素就到了i+1个位置,但是第i个位置元素还是原来的元素,我们现在就可以给第i个位置赋值就可以把原来的值覆盖。你的插入就算完成了,插入了一个元素你的线性表的长度也增加了,所以线性表的长度也应该加1。具体看下代码吧,不懂得自己动手画一画应该很快就会理解的。
bool ListInsert(sqlList *&L, int i, ElemType e)
{
if (i < 1 || i > L->Length+1)
return false;
for (int j = L->Length;j >= i;j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->Length++;
return true;
}
删除的操作就把元素往前移动一个位置:
bool ListDelete(sqlList *&L, int i, ElemType &e)
{
if (i<1 || i>L->Length)
return false;
i--;
e = L->data[i];
for (int j = i; j < L->Length; j++)
{
L->data[j] = L->data[j + 1];
}
L->Length--;
return true;
}
我觉得线性表的内容大概就这些内容吧,在下一次给大家带来关于线性表的一些小小的应用吧。