数据结构之-线性表:顺序存储

2016/10/20 17:06
阅读数 76
#include <stdio.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;
typedef int ElemType;
typedef struct {
    ElemType data[MAXSIZE]; //或者指针实现
    int length;
}SqList;

Status initList(SqList *L);
void traverseList(SqList L);
Status getElem(SqList L, int i, ElemType *e);
Status listInsert(SqList *L, int i, ElemType e);
Status listDelete(SqList *L, int i, ElemType *e);


int main(void)
{
    int i;
    ElemType e;
    SqList L;

    initList(&L);
    for (i = 1; i <= MAXSIZE; i++) {
        e = i * i * i;
        listInsert(&L, i, e);
    }

    getElem(L, 5, &e);
    printf("%d\n", e);

    traverseList(L);

    return 0;
}

Status initList(SqList *L)
{
    L->length = 0;

    return OK;
}

Status getElem(SqList L, int i, ElemType *e)
{
    if (L.length == 0 || i < 1 || i > L.length) {
        return ERROR;
    }

    *e = L.data[i - 1];
    return OK;
}

Status listInsert(SqList *L, int i, ElemType e)
{
    if (L->length == MAXSIZE) {
        return ERROR;
    }

    if (i < 1 || i > L->length + 1) {
        return ERROR;
    }

    int k;
    if (i <= MAXSIZE) {
        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;
}

Status listDelete(SqList *L, int i, ElemType *e)
{
    if (L->length == 0) {
        return ERROR;
    }

    if (i < 1 || i > L->length) {
        return ERROR;
    }

    *e = L->data[i - 1];
    int k;
    for (k = i; k < L->length; k++) {
        L->data[k - 1] = L->data[k];
    }

    L->length--;
    return OK;
}

void traverseList(SqList L)
{
    int i;
    for (i = 0; i < L.length; i++) {
        printf("%2d: %4d\n", i, L.data[i]);
    }
}

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部