初学数据结构,便多作了些实践内容,将课本上的内容自己理解后写了一遍。希望付出值得。
0.前提准备
#define MAXSIZE 50
typedef int ElemType;
1.建立结构体
typedef struct
{
ElemType Data[MAXSIZE];
int len;
}SqList;//建立结构体
2.创造线性表
void CreatList(SqList*& L, ElemType a[], int n) //创造线性表
{
int i = 0;
int k = 0;
L = (SqList*)malloc(sizeof(SqList));
while (i < n)
{
L->Data[k] = a[i];
k++; i++;
}
L->len = k;
}
3.展示线性表
void DisplayList(SqList*& L) //展示线性表
{
for (int i = 0; i < L->len; i++)
{
cout << L->Data[i] << " ";
}
}
4.Initial SqList
void InitList(SqList* &L) //Initial SqList
{
L = (SqList* )malloc(sizeof(SqList));
L->len = 0;
}
5.删除线性表
void DestroyList(SqList*& L) //删除线性表
{
free(L);
}
6.线性表长度
int LenList(SqList*& L) //线性表长度
{
return L->len;
}
7.求线性表中某个数据元素值
bool GetElem(SqList*& L, int i, ElemType e) //求线性表中某个数据元素值
{
if (i <= 1 || i >= L->len)
return false;
e = L->Data[i - 1];
return true;
}
8.查找元素位置
int LocateElem(SqList*& L, ElemType e) //查找元素位置
{
int i = 0;
while (i < L->len && L->Data[i] != e)
{
i++;
if (i > L->len)
return 0;
else return i + 1;
}
}
9.在i处插入e值
bool ListInsert(SqList*& L, int i, ElemType e) //在i处插入e值
{
if (i<1 || i>L->len + 1)
return false;
i--;//变相把逻辑符号中首位0,变为首位1;
for (int j = L->len; j > i; j--)
L->Data[j] = L->Data[j - 1];
L->Data[i] = e;
L->len++;
}
10.删除元素
bool DeleList(SqList*& L, int i) //删除元素
{
if (i<1 || i>L->len)
return false;
i--;
for (int j = i; j < L->len; j++)
{
L->Data[j ] = L->Data[j+1];
}
L->len--;
return true;
}
最后源代码送上
#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 50
typedef int ElemType;
typedef struct
{
ElemType Data[MAXSIZE];
int len;
}SqList;//建立结构体
void CreatList(SqList*& L, ElemType a[], int n) //创造线性表
{
int i = 0;
int k = 0;
L = (SqList*)malloc(sizeof(SqList));
while (i < n)
{
L->Data[k] = a[i];
k++; i++;
}
L->len = k;
}
void DisplayList(SqList*& L) //展示线性表
{
for (int i = 0; i < L->len; i++)
{
cout << L->Data[i] << " ";
}
}
void InitList(SqList* &L) //Initial SqList
{
L = (SqList* )malloc(sizeof(SqList));
L->len = 0;
}
void DestroyList(SqList*& L) //删除线性表
{
free(L);
}
int LenList(SqList*& L) //线性表长度
{
return L->len;
}
bool GetElem(SqList*& L, int i, ElemType e) //求线性表中某个数据元素值
{
if (i <= 1 || i >= L->len)
return false;
e = L->Data[i - 1];
return true;
}
int LocateElem(SqList*& L, ElemType e) //查找元素位置
{
int i = 0;
while (i < L->len && L->Data[i] != e)
{
i++;
if (i > L->len)
return 0;
else return i + 1;
}
}
bool ListInsert(SqList*& L, int i, ElemType e) //在i处插入e值
{
if (i<1 || i>L->len + 1)
return false;
i--;//变相把逻辑符号中首位0,变为首位1;
for (int j = L->len; j > i; j--)
L->Data[j] = L->Data[j - 1];
L->Data[i] = e;
L->len++;
}
bool DeleList(SqList*& L, int i) //删除元素
{
if (i<1 || i>L->len)
return false;
i--;
for (int j = i; j < L->len; j++)
{
L->Data[j ] = L->Data[j+1];
}
L->len--;
return true;
}
int main()
{
int n;
cin >> n;
SqList* L;
int i, value;
int* a = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++) //下标值即为对应元素值
a[i] = i;
CreatList(L, a, n);
DisplayList(L);
ListInsert(L, i, value); //i表示位置,value表示插入的值
DisplayList(L);
DeleList(L, i);//i 表示删除元素的位置
DisplayList(L);
LenList(L); //线性表长度
GetElem(L, i, value); //查找相应位置的值是否存在
LocateElem(L, value); //定位为value值得位置
InitList(L);//初始化线性表
DestroyList(L);//释放内存
}