数据结构-线性表的学习
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
//线性表
//定义一个结构体
typedef struct
{
int *data;//动态扩充数组的大小
int MaxSize;//顺序表的最大长度
int length;//顺序表当前的元素个数
}SeqList;
//打印
void printList(SeqList &L, int index)
{
for (int i = 0; i <index; i++)
{
printf("%d\t", L.data[i]);
}
printf("\n");
}
//初始化线性表:开辟动态空间
void InitList(SeqList &L)
{
L.data = (int *)malloc(sizeof(int)*InitSize);
L.length = 0;
L.MaxSize = InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList &L,int len)
{
int *p = L.data;
L.data = (int *)malloc(sizeof(int)*(L.MaxSize+len));
//增加新的空间,原来的值不见了,在p中寻找
for (int i = 0; i < L.length; i++)
{
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize + len;
free(p);
}
//插入到线性表中的指定位置
bool InsertElem(SeqList &L,int index,int e)
{
//判断i的位置是否合法:算法的健壮性
if (index < 0 || index > L.length + 1)
return false;
if(index>L.MaxSize)
return false;
for (int i = L.length; i >= index;i--)
{
L.data[i] = L.data[i - 1];
}
L.data[index-1] = e;
L.length += 1;
L.MaxSize += 1;
return true;
}
//删除指定下标的值,并使用e将删除的值带回去
bool DeleteElem(SeqList &L, int index, int &e)
{
//判断i的位置是否合法:算法的健壮性
if (index < 0 || index > L.length + 1)
return false;
e = L.data[index - 1];
for (int i = index; i <= L.length; i++)
{
L.data[i-1] = L.data[i];
}
L.data[--L.length] = 0;
return true;
}
//按值查找
int searchElem(SeqList &L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (L.data[i]==e)
{
return i + 1;
}
}
return 0;
}
//按位查找
int searchIndex(SeqList &L, int index)
{ return L.data[index - 1]; }
int main()
{
SeqList L;
InitList(L);
for (int i = 0; i < 4; i++)
{
L.data[i] = i + 3;
L.length++;
}
if(InsertElem(L,2,10)){
printList(L,L.length);
}
int e = -1;
DeleteElem(L, 2, e);
printList(L, L.length);
// IncreaseSize(L, 5);
return 0;
}