注意定义的函数的顺序,后面调用前面 不能前面调用后面
/*顺序存储结构*/
#include <stdio.h>
#include <stdlib.h> //pause 的头文件
#include <time.h> // 使用当前时钟做种子
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 //存储空间最大分配量
#define LIST_INITSIZE 5
typedef int Status;//Status 是函数的类型,其值是函数结果状态代码 如OK
typedef int ElemType;//ElemType类型根据实际情况定
/*顺序存储结构*/
/**
顺序存储结构的三个属性
1. 存储空间的起始位置:数组data,其存储位置就是存储空间的存储位置
2. 线性表的最大存储容量 数组长度MaxSize
3. 线性表当前长度 length
*/
typedef struct Node
{
ElemType data[MAXSIZE];//数组存储数据元素,最大值为MAXSIZE
int length;//线性表当前长度
}SqList; //别名
/*初始化*/
Status InitList_Sq(SqList *L)
{
int k;
// 初始化随机化函数
srand((unsigned)time(NULL));
L->length = LIST_INITSIZE;
for(k=0;k<L->length;k++)
{
L->data[k] = rand();
}
return OK;
}
/**
初始条件:顺序线性表L已存在,1<=i<=ListLength(L)
操作结果:用e返回L中第i个数据元素的值
*/
/*获取第i个元素*/
Status GetElem(SqList L,int i,ElemType *e)
{
// 判断i是否越界
if(L.length==0||i<1||i>L.length)
{
return ERROR;
}
*e = L.data[i-1];
printf("第%d个元素的值为%d\n\n",i,*e);
return OK;
}
/**
插入操作
1. 插入位置的合理性
2. 数组容量是否充足(抛出异常/增加容量)
3. 元素插入
4. length++
*/
Status ListInsert(SqList *L,int i, ElemType e)
{
int k;//用于向后推移的位置变量
// 判断是否越界
if(L->length>=MAXSIZE||i<1||i>L->length+1)
{
return ERROR;
}
if (i!=L->length)
{
// 将第i个元素及其之后的元素向后移动一位
for(k=L->length-1;k>=i-1;k--)
{
L->data[k+1] = L->data[k];
}
}
L->data[i-1] = e;
L->length++;
return OK;
}
/**
删除元素
1. 判断删除位置的合理性
2. 取出删除元素
3. 移动元素
4. 表长--
*/
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if (L->length==0||i<1||i>L->length)
{
return ERROR;
}
*e = L->data[i-1];
// 删除后前移一位
if (i!=L->length)
{
for(k=i-1;k<L->length-1;k++)
{
L->data[k]=L->data[k+1];
}
}
L->length--;
return OK;
}
/*输出*/
void PrintList(SqList L)
{
int i; // 用于循环遍历
printf("开始输出\n");
for (i = 0; i < L.length; i++)
{
printf("%d ",L.data[i]);
}
printf("\n输出结束\n\n");
}
void main(void){
SqList L;
int k;// 用于循环遍历
ElemType *e;
e = (ElemType *)malloc(sizeof(ElemType));
// 初始化
InitList_Sq(&L);
//输出测试
PrintList(L);
// 获取测试
GetElem(L,5,e);
// 插入测试
ListInsert(&L,6,32);
ListInsert(&L,7,7);
PrintList(L);
// 删除测试
ListDelete(&L,5,e);
PrintList(L);
system("pause");
}