#include <stdlib.h> #include <stdio.h> /* function return type code */ #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 /* Status is return type */ typedef int Status |
#include "Status.h" #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 struct SqList { ElemType *elem; int length; int listsize; }; typedef struct SqList SqList; /* ALG 2.3 */ 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; }/* InitList_Sq */ /* ALG 2.4 */ Status ListInsert_Sq(Sqlist *L, int i, ElemType e) { if(i<0 || i>(L->length)) return ERROR; if(L->length >= L->listsize) { ElemType *newbase; newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L->elem = newbase; L->listsize += LISTINCREMENT; } ElemType *p, *q; q = L->elem + i; for(p = L->elem + l->length; p>q; --p) *p = *(p - 1); *q = e; ++L.length; return OK; }/* ListInsert_Sq */ /* ALG 2.5 */ Status ListDelete_Sq(Sqlist *L, int i, ElemType *e) { if((i<0) || (i>(L->lenth - 1))) return ERROR; ElemType *p, *q; p = L->elm + i; *e = *p; for(q = L->elem + L.length - 1; q>p; --q) *(q - 1) = *q; --(L->length); return OK; }/* ListDelete_Sq */ |
/*#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10*/ struct SqList { ElemType *elem; int length; int listsize; }; typedef struct SqList Sqlist; /* ALG 2.3 */ 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; }/* InitList_Sq */ /* ALG 2.4 */ Status ListInsert_Sq(Sqlist *L, int i, ElemType e) { if(i<0 || i>(L->length)) return ERROR; if(L->length >= L->listsize) { ElemType *newbase; newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L->elem = newbase; L->listsize += LISTINCREMENT; } ElemType *p, *q; q = L->elem + i; for(p = L->elem + l->length; p>q; --p) *p = *(p - 1); *q = e; ++L.length; return OK; }/* ListInsert_Sq */ /* ALG 2.5 */ Status ListDelete_Sq(Sqlist *L, int i, ElemType *e) { if((i<0) || (i>(L->lenth - 1))) return ERROR; ElemType *p, *q; p = L->elm + i; *e = *p; for(q = L->elem + L.length - 1; q>p; --q) *(q - 1) = *q; --(L->length); return OK; }/* ListDelete_Sq */ |
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |