静态顺序表和动态顺序表 对比

静态顺序表的缺陷:

静态顺序表显然就是里面的内存是一定的,不能改变的,所以定义的时候可以定义一个宏,然后定义一个数组,这样就可以在数组中存储信息,而且,还可以随时改变数组的大小。

typedef int DataType;
#define MaxSize 10

typedef struct SeqList
{
    DataType array[MaxSize];
    size_t size;   // 有效数据元素的个数
}SeqList;

静态顺序表和动态顺序表 对比_第1张图片

不过,这样的情况不安全,因为,每个人都可以改变的数组的大小,这是宏定义的缺陷,也是静态顺序表的缺陷。
下面是顺序表的各种功能实现:
http://blog.csdn.net/jhcconan614/article/details/53869920

动态顺序表

typedef struct strSeqList{
    DateType * array;
    size_t size;
    siz_t capacity;
}SeqList,*pSeqList;

静态顺序表和动态顺序表 对比_第2张图片

头文件:

#include   
#include    
#include   
#include  

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;

你可能感兴趣的:(数据结构)