静态顺序表的缺陷:
静态顺序表显然就是里面的内存是一定的,不能改变的,所以定义的时候可以定义一个宏,然后定义一个数组,这样就可以在数组中存储信息,而且,还可以随时改变数组的大小。
typedef int DataType;
#define MaxSize 10
typedef struct SeqList
{
DataType array[MaxSize];
size_t size; // 有效数据元素的个数
}SeqList;
不过,这样的情况不安全,因为,每个人都可以改变的数组的大小,这是宏定义的缺陷,也是静态顺序表的缺陷。
下面是顺序表的各种功能实现:
http://blog.csdn.net/jhcconan614/article/details/53869920
动态顺序表
typedef struct strSeqList{
DateType * array;
size_t size;
siz_t capacity;
}SeqList,*pSeqList;
头文件:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h>
typedef int DataType;
typedef unsigned size_t;
typedef struct SeqList_D {
DataType* array; //指向数据块的指针
size_t size; //当前数据数
size_t capacity; //总容量
}SeqList_D;
void InitSeqList_D(SeqList_D* pseq_d); //初始化函数
int IsFullCapacity(SeqList_D* pseq_d); //判满函数
int IsEmptyCapacity(SeqList_D* pseq_d); //判空函数
void PushBack(SeqList_D* pseq_d,DataType data);//尾插函数
void PopBack(SeqList_D* pseq_d); //尾删函数
void PrintSeq(SeqList_D* pseq_d); //打印函数
函数部分:
#include "SeqList_D.h"
void InitSeqList_D(SeqList_D* pseq_d)
{
assert(pseq_d);
pseq_d->array = (DataType*)malloc(sizeof(DataType) * 3);
pseq_d->size = 0;
pseq_d->capacity = 3;
}
void PushBack(SeqList_D* pseq_d,DataType data)
{
assert(pseq_d);
if(IsFullCapacity(pseq_d))//full
{
pseq_d->capacity = pseq_d->capacity * 2 + 3;
pseq_d->array = (DataType*)realloc(pseq_d->array, sizeof(DataType) * pseq_d->capacity);
}
pseq_d->array[pseq_d->size++] = data;
}
int IsFullCapacity(SeqList_D* pseq_d)
{
if(pseq_d->size >= pseq_d->capacity)
{
return 1; //full
}
else
{
return 0;
}
}
int IsEmptyCapacity(SeqList_D* pseq_d)
{
if(pseq_d->size <= 0)
{
return 1; //empty
}
else
return 0;
}
void PopBack(SeqList_D* pseq_d)
{
if(IsEmptyCapacity)
{
printf("SeqList is Eempty");
return;
}
else
{
pseq_d->size--;
}
}
void PrintSeq(SeqList_D* pseq_d)
{
int i = 0;
for(;i < pseq_d->size; i++)
{
printf("%d->", pseq_d->array[i]);
}
}
测试函数:
#include "SeqList_D.h"
void text1()
{
SeqList_D s1;
InitSeqList_D(&s1);
PushBack(&s1, 1);
PushBack(&s1, 2);
PushBack(&s1, 3);
PushBack(&s1, 4);
PushBack(&s1, 5);
PrintSeq(&s1);
}
int main()
{
text1();
system("pause");
return 0;