• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

数据结构中顺序表的初始化(指针)

互联网 diligentman 1天前 7次浏览

数据结构中顺序表是最简单的一种表。要想学习顺序表通过指针动态的初始化顺序表,先得了解一些基本概念。比如malloc函数是动态开辟内存空间的,free函数是释放malloc开辟的内存空间的。malloc函数动态开辟内存空间后会返回一个void类型的指针起始地址。所以要用这个函数就必须强制转换成你所定义的数据类型。所谓动态分配内存就会解决起始内存存满的情况,我们就可以再写一个扩容的函数来增加我们的内存空间。但是这样的扩容方式有一点缺点就是耗费时间,因为要想开辟新的空间,就必须把旧的空间元素复制到新的内存空间,就导致时间耗费大。下面请看详细的代码

#include <iostream>
#include <stdlib.h>
#define InitSize 10//宏定义初始数组大小 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//动态定义表结构(malloc函数:动态申请空间;free函数:动态释放空间)
typedef struct {
    int *data;//指示动态分配数组的指针 
    int MaxSize;//定义表最大容量 
    int length;//定义表当前长度 
}SeqList;

//初始化动态分配表的结构(通过malloc函数动态申请一连串的内存空间) 
void InitList(SeqList &L){
    L.data = (int*)malloc(InitSize * sizeof(int));
    L.length = 0;
    L.MaxSize = InitSize;
//  for(int i=0;i<L.MaxSize;i++){
//      L.data[i] = 0;
//  }
} 

//增加内存空间
void IncreaseSize(SeqList &L,int len){
    int *p = L.data;//原来的数组指针 
    L.data = (int*)malloc((L.MaxSize+len) * sizeof(int));//利用malloc函数申请增加len长度的连续空间 
    //由于是数组,想要扩容必须申请新的大空间,然后再将旧的数据拷贝过来 
    for(int i=0;i<L.length;i++){
        L.data[i]=p[i];
    }
    L.MaxSize = L.MaxSize + len; 
    free(p);//避免浪费,释放原来的内存空间 
} 

int main(int argc, char** argv) {
    SeqList L;//初始化表 
    InitList(L); 
    printf("%dn",L.MaxSize);
//  for(int i=0;i<L.MaxSize;i++){
//      printf("%dt",L.data[i]);
//  }
    IncreaseSize(L,5);//增加5个int空间 
    printf("%dn",L.MaxSize);
//  for(int i=0;i<L.MaxSize;i++){
//      printf("%dt",L.data[i]);
//  } 
    return 0;
}
{{o.name}}


{{m.name}}


喜欢 (0)