| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 399 人关注过本帖
标题:数据结构 - 分配空间问题
只看楼主 加入收藏
FangMengHao
Rank: 1
等 级:新手上路
帖 子:43
专家分:5
注 册:2013-6-19
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:3 
数据结构 - 分配空间问题
程序代码:
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

# define SIZE 5
# define ADD 1

typedef struct
{
    int * pHead;
    int len;
    int size;
}Sqlist;

void init(Sqlist * L)
{
    L->pHead = (int *)malloc(sizeof(int)*SIZE);

    if (NULL == L->pHead)
    {
        printf ("初始化失败\n");
        exit(-1);
    }

    L->len = 0;
    L->size = SIZE;

    printf ("初始化成功\n");

}

void destroy(Sqlist * L)
{
    free(L->pHead);
    printf ("内存已经释放!\n");
}

void get(Sqlist * L)
{
    int i;
    int length;
    printf ("请输入线形表长度:");
    scanf ("%d", &length);

    for (i=0; i<length; ++i)
    {
        printf ("请输入第%d个数据:", i+1);
        scanf ("%d", &L->pHead[i]);
        L->len++;
    }
}

void insert(Sqlist * L)
{
    int i;
    int pos;
    int insert;

    printf ("请选择插入序号:");
    scanf ("%d", &pos);

    if ( pos < 1 || pos > L->len + 1 )
    {
        printf ("不合法!\n");
        exit(-1);
    }

    if (L->len >= L->size)
    {
        L->size = L->size + ADD;
        L->pHead = (int *)realloc( L->pHead, sizeof(int) * L->size );

        if (NULL == L->pHead)
        {
            printf ("插入重分配失败!\n");
            exit(-1);
        }
    }

    printf ("请输入插入数值:");
    scanf ("%d", &insert);

    for (i=L->len; i>=pos; --i)
        L->pHead[i] = L->pHead[i-1];

    L->pHead[pos-1] = insert;
    ++L->len;
}

void sort1(Sqlist * L)
{
    int i, j;
    int temp;

    for (i=0; i<L->len-1; ++i)
    {
        for (j=0; j<L->len-1-i; ++j)
        {
            if (L->pHead[j] > L->pHead[j+1])
            {
                temp = L->pHead[j];
                L->pHead[j] = L->pHead[j+1];
                L->pHead[j+1] = temp;
            }
        }
    }
}

void sort2(Sqlist * L)
{
    int i, j;
    int temp;

    for (i=0; i<L->len-1; ++i)
    {
        for (j=0; j<L->len-1-i; ++j)
        {
            if (L->pHead[j] < L->pHead[j+1])
            {
                temp = L->pHead[j];
                L->pHead[j] = L->pHead[j+1];
                L->pHead[j+1] = temp;
            }
        }
    }
}

void append(Sqlist * L)
{
    int ap;
    
    if (L->len > L->size)
    {
        L->size = L->size + ADD;
        L->pHead = (int *)realloc(L->pHead, sizeof(int) * L->size);

        if (NULL == L->pHead)
        {
            printf ("追加重分配失败!\n");
            exit(-1);
        }
    }

    printf ("请输入您需要追加的数值:");
    scanf ("%d", &ap);
    L->pHead[L->len] = ap;
    L->len++;
}

void deleted(Sqlist * L)
{
    int i;
    int dn;
    int pos;

    printf ("请输入你需要删除的序号:");
    scanf ("%d", &pos);

    if (pos < 1 || pos>L->len + 1)
    {
        printf ("不合法!\n");
        exit(-1);
    }

    dn = L->pHead[pos-1];

    for (i=pos; i<=L->len; ++i)
        L->pHead[pos-1] = L->pHead[pos];

    --L->len;
    printf ("删除值为%d\n", dn);

}

void traverse(Sqlist * L)
{
    int i;
    if (!L->pHead)
        printf ("内存混乱!\n");
    printf ("数据为:");
    for (i=0; i<L->len; ++i)
        printf ("%6d", L->pHead[i]);
    printf ("\n");
}

void locate1(Sqlist * L)
{
    int i;
    int pos;

    printf ("请输入您需要查询的序号:");
    scanf ("%d", &pos);
    if (pos<1 || pos>L->len)
    {
        printf ("不合法!\n");
        exit(-1);
    }
    printf ("该序号数值为%d\n", L->pHead[pos-1]);
}

void locate2(Sqlist * L)
{
    int i;
    int same;
    printf ("请输入您需要查找的数据:");
    scanf ("%d", &same);

    for (i=0; i<L->len; ++i)
    {
        if (L->pHead[i] == same)
            printf ("序号:%d - 数值:%d", i+1, L->pHead[i]);
    }
}

/*
bool full(Sqlist * L)
{
    if (L->len == sizeof(L->pHead)/sizeof(int))
        return true;
    else
        return false;
}

bool empty(Sqlist * L)
{
    if (L->len == 0)
        return true;
    else
        return false;
}
*/

int main (void)
{
    //变量的定义
    Sqlist L;
    int i;//循环
    int c;//switch 选择
    char q;//结束整个程序

    printf ("****************************************\n");
    printf ("    欢迎使用第五集团线形表\n");
    printf ("****************************************\n");
    printf ("    1.初始化    2.赋值\n");
    printf ("    3.插入        4.删除\n");
    printf ("    5.遍历        6.追加\n");
    printf ("    7.正序        8.倒序\n");
    printf ("    9.序号定位    10.数值定位\n");
    printf ("    11.销毁\n");
    printf ("****************************************\n\n");
    
    do
    {
        printf ("请选择您的操作:");
        scanf ("%d", &c);

        switch(c)
        {
            case 1:
                    init(&L);
                    break;
            case 2:
                    get(&L);
                    break;
            case 3:
                    insert(&L);
                    break;
            case 4:
                    deleted(&L);
                    break;
            case 5:
                    traverse(&L);
                    break;
            case 6:
                    append(&L);
                    break;
            case 7:
                    sort1(&L);
                    break;
            case 8:
                    sort2(&L);
                    break;
            case 9:
                    locate1(&L);
                    break;
            case 10:
                    locate2(&L);
                    break;
            case 11:
                    destroy(&L);
                    break;
        }
        printf ("\n是否继续使用(Y/y):");
        scanf (" %c", &q);

    }while ('Y' == q || 'y' == q);

    return 0;
}



问题:
    首先我输入1初始化,然后输入2进行赋值,如果我赋值个数为10个,但是我的初始化是只有5个int空间的,为什么最后我输入5遍历的时候还能输出10个数值,这样会导致什么问题么?
搜索更多相关主题的帖子: color 空间 
2014-12-06 15:00
FangMengHao
Rank: 1
等 级:新手上路
帖 子:43
专家分:5
注 册:2013-6-19
收藏
得分:0 
。。。。
2014-12-06 22:08
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:20 
以下是引用FangMengHao在2014-12-6 22:08:41的发言:

。。。。
怎么了?
2014-12-06 22:16
FangMengHao
Rank: 1
等 级:新手上路
帖 子:43
专家分:5
注 册:2013-6-19
收藏
得分:0 
回复 3楼 tlliqi
首先我输入1初始化,
然后输入2进行赋值,
如果我赋值个数为10个,
但是我的初始化是只有5个int空间的,为什么最后我输入5遍历的时候还能输出10个数值,这样会导致什么问题么?


就是这个问题。
2014-12-18 12:59
快速回复:数据结构 - 分配空间问题
数据加载中...
 
   



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

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