顺序结构的动态分配和静态分配

使用的是:dev;

书本是:严蔚敏的数据结构;

王道考研中的顺序表的静态分配

#include <stdio.h>
#define MaxSize 10 //最大长度 

//初始定义值 
#define OK 1  
#define ERROR 0
#define OVERFLOW -2
typedef int Status;

//静态存储 
typedef struct{
	int data[MaxSize];//数组的静态存储 
	int length;//当前长度 
}SqList;//顺序表的类型定义 
//初始化
void InitList(SqList &L){
	L.length=0;
} 
//违规打印 
int main(){
	SqList L;//声明
	InitList(L);//初始化顺序表
	for(int i=0;i<MaxSize;i++){
		printf("data[%d]=%d\n",i,L.data[i]);
	} 
}

  王道考研的顺序表的动态分配

#include <stdio.h>
#include <stdlib.h>//malloc函数的头文件 
//#define MaxSize 10 //最大长度 
#define InitSize 10
//初始定义值 
#define OK 1  
#define ERROR 0
#define OVERFLOW -2
typedef int Status;

//动态分配 
typedef struct{
	int *data;//动态分配的指针 
	int MaxSize;//最大容量 
	int length;// 当前长度 
}SeqList;//顺序表的类型定义 

//初始化
void InitList(SeqList &L){
	//用malloc函数申请一片连续的存储空间
	L.data=(int *)malloc(InitSize*sizeof(int));
	L.length=0;
	L.MaxSize=InitSize;
} 
//增加动态数据的长度
void IncreaseSize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i]; //将数据复制到新区域 
	}
	L.MaxSize=L.MaxSize+len;//最大长度增加len
	free(p);//释放原来的内存空间 
}
 
//违规打印 
int main(){
	SeqList L;//声明
	InitList(L);//初始化顺序表
	//插入数据
	IncreaseSize(L,5); 
}

  数据结构书上实现

#include <stdio.h>
#include <cstdlib>//为了exit 
#define MAXSIZE 100 //最大长度 

//初始定义值 
#define OK 1  
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;

//静态存储 
typedef struct{
	ElemType *elem;//数组的静态存储 
	int length;//当前长度 
}SqList;//顺序表的类型定义 
//初始化
Status InitList(SqList &L){
	L.elem=new ElemType[MAXSIZE];//为顺序表分配一个MAXSIZE的数组空间
	if(!L.elem)
		exit(OVERFLOW);
	L.length=0;
	return OK;
} 
//违规打印 
int main(){
	SqList L;//声明
	InitList(L);//初始化顺序表
	for(int i=0;i<MAXSIZE;i++){
		printf("data[%d]=%d\n",i,L.elem[i]);
	} 
}

  

posted @ 2020-12-21 01:17  陈遛狗  阅读(267)  评论(0编辑  收藏  举报