标题:数据结构——数组算法(求助)
只看楼主
billshu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-1-30
 问题点数:0 回复次数:4 
数据结构——数组算法(求助)
各位大神,本人初学数据结构,看到一个程序如下,但不懂得这两句话(划下划线)的区别:
 int len;    //数组所能容纳的最大元素的个数
int cnt;    //当前数组有效元素的个数


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct Arr
{
    int * pBase;//存储数组第一个元素的地址
    int len;    //数组所能容纳的最大元素的个数
    int cnt;    //当前数组有效元素的个数
};
void intail_arr(struct Arr * pArr,int length);
void show_arr(struct Arr * pArr);
void inversion_arr(struct Arr * pArr);
void sort_arr(struct Arr * pArr);
bool is_empty(struct Arr * pArr);
bool is_full(struct Arr * pArr);
bool append_arr(struct Arr * pArr,int val);
bool insert_arr(struct Arr * pArr,int pos,int val);
bool delete_arr(struct Arr * pArr,int pos,int* pDeleteVal);
int main(void)
{
    int deleteVal;
    struct Arr arr;
    intail_arr(&arr,6);
    printf("向数组追加几个元素\n");
    append_arr(&arr,1);
    append_arr(&arr,-2);
    append_arr(&arr,10);
    append_arr(&arr,8);
    append_arr(&arr,5);   
    show_arr(&arr);
    printf("在位置3处插入一个元素\n");
    insert_arr(&arr,3,33);
    show_arr(&arr);
    printf("删除位置3处的元素\n");
    if(delete_arr(&arr,3,&deleteVal))
    {
        printf("你删除的元素是:%d\n",deleteVal);
    }
    else
    {
        printf("删除失败!");
    }
    show_arr(&arr);
    printf("倒置数组中的元素\n");
    inversion_arr(&arr);
    show_arr(&arr);
    printf("给数组元素按升序排序\n");
    sort_arr(&arr);
    show_arr(&arr);
    system("pause");
    return 0;
    /*屏幕输出
    向数组追加几个元素
    1 -2 10 8 5
    在位置3处插入一个元素
    1 -2 33 10 8 5
    删除位置3处的元素
    你删除的元素是:33
    1 -2 10 8 5
    倒置数组中的元素
    5 8 10 -2 1
    给数组元素按升序排序
    -2 1 5 8 10
    请按任意键继续. . .
    */
}
//初始化数组
void intail_arr(struct Arr * pArr,int length)
{
    pArr->pBase= (int *)malloc(sizeof(int)*length);
    if(pArr->pBase==NULL)
    {
        printf("动态分配内存失败!\n");
        exit(-1);//终止整个程序
    }
    else
    {
        pArr->len=6;
        pArr->cnt=0;
    }
    return;
}
//判断数组是否为空
bool is_empty(struct Arr * pArr)
{
    if(pArr->cnt==0)
    return true;
    else
    return false;
}
//输出数组
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 is_full(struct Arr * pArr)
{
    if(pArr->cnt==pArr->len)
    return true;
    else
    return false;
}
//向数组追加元素
bool append_arr(struct Arr * pArr,int val)
{
    if(is_full(pArr))
    return false;
    else//如果数组不满可以追加元素
    {
        pArr->pBase[pArr->cnt]=val;
        pArr->cnt++;
        return true;
    }
}
//向数组的某个位置插入元素(pos从1开始)
bool insert_arr(struct Arr * pArr,int pos,int val)
{
    if(is_full(pArr))
    return false;
    if(pos<1||pos>pArr->cnt+1)
    return false;
    for(int i=pArr->cnt-1;i>=pos-1;i--)
    {
        pArr->pBase[i+1]=pArr->pBase[i];
    }
    pArr->pBase[pos-1]=val;
    pArr->cnt++;
    return true;
}
//删除某个位置的元素
bool delete_arr(struct Arr * pArr,int pos,int * pDeleteVal)
{
    if(is_empty(pArr))
        return false;
    if(pos<1||pos>pArr->cnt)
        return false;
    int i;
    *pDeleteVal=pArr->pBase[pos-1];
    for(i=pos;i<pArr->cnt;i++)
    {
        pArr->pBase[i-1]=pArr->pBase[i];
    }
    pArr->cnt--;
    return true;
}
//倒置数组元素
void inversion_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,t;
    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;
            }
        }
    }
    return;   
}
搜索更多相关主题的帖子: void include 下划线 元素 
2013-01-30 10:39
billshu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-1-30
得分:0 
回复 楼主 billshu
我明白了了!呵呵!
2013-01-30 10:50
一毛钱的诱惑
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-1-30
得分:0 
晕了
2013-01-30 19:43
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
得分:0 
明白了不错啊,刚学就明3白了,好。我可是挂科了之后才明白的啊。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-02-01 18:27
snail419
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-23
得分:0 
楼主学的是郝斌的视频吧,我也在学这个, ,这里的len 和 cnt
首先 pArr->pBase = (int *)malloc(sizeof(int)*len); 开辟了sizeof(int)*len 个字节的空间 并返回了首地址给pBase,强制类型转换是int *  类型的 ,也就是
说开辟了 len个int类型的空间,这个长度 给定len值 也就固定了,
打个比喻,就是建造了len个有int个床位的房子,cnt代表已经住了人的。
2013-03-24 10:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-397892-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.385876 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved