顺序表的基本功能实现:
void SeqListInit(SeqList *plist);
void SeqListDestroy(SeqList *plist);
void SeqListPushBack(SeqList *plist, ElemType x);
void SeqListPushFront(SeqList *plist, ElemType x);
void SeqListShow(SeqList *plist);
void SeqListPopBack(SeqList *plist);
void SeqListClear(SeqList *plist);
bool SeqListInsertByPos(SeqList *plist, int pos, ElemType x);
void SeqListSort(SeqList *plist);
int SeqListLength(SeqList *plist);
void SeqListPopFront(SeqList *plist);
bool SeqListInsertByVal(SeqList *plist, ElemType x);
void SeqListSearch(SeqList plist, ElemType x);
void SeqListErase(SeqList plist, ElemType pos);
bool _Inc(SeqList *plist, int new_capacity)
common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
#include<memory.h>
#include<vld.h> //用于内存泄漏的检测
#define ElemType int
void Swap(ElemType *a, ElemType *b)
{
ElemType tmp = *a;
*a = *b;
*b = tmp;
}
#endif /* _COMMON_H_ */
seqlist.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include"Common.h"
#define SEQLIST_DEFAULT_SIZE 8
//定义顺序表的结构
typedef struct SeqList
{
ElemType *base;
size_t capacity;
size_t size;
}SeqList;
void SeqListInit(SeqList *plist);
void SeqListDestroy(SeqList *plist);
void SeqListPushBack(SeqList *plist, ElemType x);
void SeqListPushFront(SeqList *plist, ElemType x);
void SeqListShow(SeqList *plist);
void SeqListPopBack(SeqList *plist);
void SeqListPopFront(SeqList *plist);
void SeqListClear(SeqList *plist);
bool SeqListInsertByPos(SeqList *plist, int pos, ElemType x);
bool SeqListInsertByVal(SeqList *plist, ElemType x);
void SeqListEraseByPos(SeqList *plist, int pos);
void SeqListEraseByVal(SeqList *plist, ElemType key);
void SeqListSort(SeqList *plist);
size_t SeqListLength(SeqList *plist);
size_t SeqListCapacity(SeqList *plist);
int SeqListFind(SeqList *plist, ElemType key);
void SeqListReverse(SeqList *plist);
bool _Inc(SeqList *plist, size_t new_capacity)
{
#if 0
assert(plist != NULL && new_capacity > plist->capacity);
ElemType *new_base = (ElemType*)realloc(plist->base, sizeof(ElemType) * new_capacity); //realloc
if(new_base == NULL)
return false;
plist->base = new_base;
plist->capacity = new_capacity;
return true;
#endif
assert(plist != NULL && new_capacity > plist->capacity);
ElemType *new_base = (ElemType*)malloc(sizeof(ElemType) * new_capacity); //realloc
if(new_base == NULL)
return false;
memcpy(new_base, plist->base, sizeof(ElemType)*(plist->capacity));
free(plist->base);
plist->base = new_base;
plist->capacity = new_capacity;
return true;
}
bool IsFull(SeqList *plist)
{
assert