顺序表的初始、插入、删除实现

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#include<stdlib.h>
#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct {
    ElemType *elem;
    int length;
    int listsize;
} SqList;

Status InitList_Sq(SqList *L) {
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if (!L->elem) exit(OVERFLOW);
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return OK;
}

Status ListInsert_Sq(SqList *L, int i, ElemType e) {
    ElemType *newbase, *q, *p;
    if (i < 1 || i > L->length + 1) return ERROR;
    if (L->length >= L->listsize) {
        newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType));
        if (!newbase) exit(OVERFLOW);
        L->elem = newbase;
        L->listsize += LISTINCREMENT;
    }
    q = &(L->elem[i-1]);
    for (p = &(L->elem[L->length - 1]); p >= q; --p) *(p + 1) = *p;
    *q = e;
    ++L->length;
    return OK;
}

Status ListDelete_Sq(SqList *L, int i, ElemType *e) {
    ElemType *p, *q;
    if(i < 1 || i > L->length) return ERROR;
    p = &(L->elem[i - 1]);
    *e = *p;
    q = L->elem + L->length - 1;
    for(++p; p length;
    return OK;
}

回复 (0)

› 尚无评论。

发表评论

允许使用的标签 - 您可以在评论中使用如下的 HTML 标签以及属性。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用通告 (0)

› 尚无引用通告。