顺序表是数据结构中最简单的存储结构,用一组连续地址存储单元依次存储线性表中的数据元素。
特点:顺序表中元素的逻辑顺序与其物理顺序相同。
#include<stdio.h>
#include<stdlib.h>
#define true 1
#define flase 0
#define MaxSize 50
typedef struct {
int *data;
int length;
}SqList;//利用动态内存分配实现顺序表
SqList InitSqList()//初始化表,构造一个空的线性表
{
SqList L;
L.data[MaxSize] = {0};
L.length = 0;
return L;
}
int Length(const SqList L)//求表长
{
return L.length;
}
int LocateElem(const SqList L, int e)//按值查找操作。
{
for(int i = 0;i < L.length;i++) {
if(L.data[i] == e)
return true;
}
return flase;
}
int GetElem(const SqList L, int i)//按位查找操作
{
if(i >= 1 && i <= L.length) {
return L.data[i - 1];
}
else
return flase;
}
int ListInsert(SqList &L, int i, int e)//在表L中的第i个位置插入指定元素e
{
if(i < 1 || i > L.length + 1)
return flase;
if(L.length >= MaxSize)
return flase;
for(int j = L.length;j >= i; j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return true;
}
int ListDelete(SqList &L, int i, int &e)//删除表L中第i个位置的元素,并用e返回删除元素的值
{
if(i < 1 || i > L.length)
return flase;
e = L.data[i - 1];
for(int j = i;j < L.length; j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
void PrintList(const SqList L)//打印顺序表
{
printf("The L\nData:");
for(int i = 0;i < L.length;i++)
printf("%d ",L.data[i]);
printf("\nLength: %d\n", L.length);
}
int Empty(const SqList L)//判断表是否为空
{
if(L.length == 0)
return true;
else
return flase;
}
int DestroyList(SqList &L)//销毁表,因为这里的数组是自动变量,所以不能主动释放数组内存。
{
printf("Can't destroy SqList");
return true;
}
int main()
{
int e = 0;
int i = 0;
SqList L = InitSqList();
//此时顺序表为空
if(Empty(L))
PrintList(L);
//顺序输入五个数字到表中
for(int i = 1;i <= 5;i++)
{
scanf("%d",&e);
ListInsert(L,i,e);
}
PrintList(L);
//查找表中是否存在e值
scanf("%d",&e);
if(LocateElem(L,e))
PrintList(L);
else
printf("%d is not belong to L\n", e);
//查找表中第i位的元素
scanf("%d",&i);
if(e = GetElem(L,i))
printf("Position %d in L is %d\n", i,e);
else
printf("ERROR!\n");
//删除表中第i为元素,并返回它的值
scanf("%d", &i);
if(ListDelete(L, i ,e))
printf("%d\n",e);
else
printf("ERROR!\n");
//最后输出顺序表
PrintList(L);
return 0;
}
主函数测试如下: