连续存储

来源:互联网 发布:无网络手机电脑传文件 编辑:程序博客网 时间:2024/04/30 12:30

线性结构:把所有的结点(数组元素)用一根线穿起来。

  1. 连续存储[数组]
  2. 离散存储[链表]
线性结构的两种常见应用之一:栈(函数调用,内存分配)
线性结构的两种常见应用之一:队列(和时间有关的操作)

1.数组
什么叫数组:元素类型相同,大小相等

ArrayList:
#include <stdio.h>#include <malloc.h>//包含了malloc函数#include <stdlib.h>//包含了exit函数/*定义了一个数据类型,该数据类型的名字叫struct Arr没有变量*/struct Arr{    int *pBase;//存储的是数组第一个元素的地址    int len;//数组所能容纳的最大元素的个数    int cnt;//当前数组有效元素的个数    int increment;//自动增长因子(每次数组增长的长度)};void init_arr(struct Arr * pArr,int length);//分号不能省bool append_arr(struct Arr * pArr,int val);//追加bool insert_arr(struct Arr * pArr,int pos,int val);//pos的值从1开始bool delete_arr(struct Arr * pArr,int pos,int *pVal);//pVal接受返回的值int get();bool is_empty(struct Arr * pArr);bool is_full(struct Arr * pArr);void sort_arr(struct Arr * pArr);void show_arr(struct Arr * pArr);void inverseion_arr(struct Arr * pArr);int main(void){    struct Arr arr;//已经分配内存    int val    init_arr(&arr,6);    show_arr(&arr);    bool append_arr(&arr,1);    show_arr(&arr);    delete_arr(&arr,1,&val);    return 0;}void init_arr(struct Arr * pArr,int length){    pArr->pBase = (int*)malloc(sizeof(int)*6);    if(NULL == pArr->pBase)//内存分配失败    {     printf("动态内存分配失败!\n");     exit(-1);//终止整个程序    }    else    {     pArr->len = length;     pArr->cnt = 0;    }    return;}bool is_empty(struct Arr * pArr){    if( 0== pArr->cnt)       return true;    else       return false;}bool is_full(struct Arr * pArr){    if(pArr->cnt == pArr->len)        return true;}void show_arr(struct Arr * pArr){    if(is_empty(&pArr))    {     printf("数组为空!\n");    }    else    {        for(int i = 0;i<pArr->cnt;++i)           printf("%d",pArr->pBase[i]);   printf("\n");    }}bool append_arr(struct Arr * pArr,int val){       //满时返回false    if(is_full(pArr))        return false;    //不满时追加    pArr->pBase[pArr->cnt] = val;    (pArr->cnt)++;    return true;}bool insert_arr(struct Arr * pArr,int pos,int val){    int i;    if(is_full(pArr))        return false;    if(pos<1 || pos>pArr->cnt+1)        return false;    for(i=pArr->cnt-1;i>=pos-1;i++)    {        pArr->pBase[i-1] = pArr->pBase[i];    }    pArr->pBase[pos-1] = val;    return true;    pArr->cnt++;}bool delete_arr(struct Arr * pArr,int pos,int *pVal){    int i;    if(is_empty(pArr))        return false;    if(pos < 1 || pos > pArr->cnt)        return false;    *pVal = pArr->pBase[pos-1];    for(i=pos;i<pArr->cnt;++i)    {        pArr->pBase[i-1] = pArr->pBase[i];    }    pArr->cnt--;    return ture;}void inverseion_arr(struct Arr * pArr){    int i =0;    int j = pArr->cnt-1;    int t;    while(i<j)    {        t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;++i;--j;    }    return;}void sort_arr(struct Arr * pArr){    int i,j;    for(i=0;i<pArr->cnt;++i)    {        for(j=i+1;j<pArr->cnt;++j){    if(pArr->pBase[i] > pArr->pBase[j])    {        t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;    }}    }}



0 0