定义:将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表)
#include <stdio.h>
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define maxSize 100
#define OK 1
#define ERROR 0
/* ElemType类型根据实际情况而定,这里假设为int */
typedef int ElemType;
/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Status;
typedef struct {
ElemType *data;
int length;
}Array;
Status initLisr(Array *array){
//为顺序表分配一个大小为MAXSIZE 的数组空间
array->data = malloc(sizeof(ElemType) * maxSize);
//存储失败退出
if (!array->data) {
exit(ERROR);
}
//设置空表长度
array->length = 0;
return OK;
}
/// 顺序列表插入数据
/// @param array 被操作的结构体地址
/// @param i 插入的位置
/// @param e 插入的数据
Status insertList(Array *array,int i,ElemType e){
//插入位置不合法判断
if (i < 0 || i > array->length) {
return ERROR;
}
//存储空间已满
if(array->length == maxSize){
return ERROR;
}
//判断插入的位置是否在最后一位
if(i < array->length){
for(int j = array->length-1; j>=i;j--){
//插入位置以及之后的位置后移动1位
array->data[j+1] = array->data[j];
}
}
array->data[i] = e;
array->length ++;
return OK;
}
/// 获取数据
/// @param i 获取数据的位置
ElemType getItem(Array array,int i){
if (i < 0 && i >= array.length) {
return ERROR;
}
return array.data[i];
}
/// 删除数据
/// @param i 删除数据的下标
void deleteItem(Array *array,int i){
if (array->length == 0) {
return;
}
if (i < 0 && i >= array->length) {
return;
}
for (int j = i; j < array->length; j ++) {
//被删除元素之后的元素向前移动
array->data[j] = array->data[j + 1];
}
array->length --;
}
/// 清空列表
void clearList(Array *array){
array->length = 0;
}
//1.8 顺序输出List
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:依次对L的每个数据元素输出 */
Status TraverseList(Array array)
{
int i;
for(i=0;i<array.length;i++)
printf("%d\n",array.data[i]);
printf("\n");
return OK;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Array a;
Status iStatus;
//初始化
iStatus = initLisr(&a);
printf("初始化a后: a.Length = %d\n", a.length);
for (int i = 0; i < 6; i ++) {
//插入数据
iStatus = insertList(&a, 0, i);
}
//删除下标为3的数据
deleteItem(&a, 3);
//查看所有数据
iStatus = TraverseList(a);
//获取下表为1的数据
printf("取之:%d\n",getItem(a, 1));
}
return 0;
}
网友评论