美文网首页
线性表之顺序存储结构实现

线性表之顺序存储结构实现

作者: 十年开发初学者 | 来源:发表于2021-04-07 15:47 被阅读0次

定义:将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表)

#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;
}

相关文章

网友评论

      本文标题:线性表之顺序存储结构实现

      本文链接:https://www.haomeiwen.com/subject/cyjukltx.html