C语言数据结构,写了个有序顺序表,挂掉了,大家帮我看看哪里出错了吧,谢!

#include"stdafx.h"#include<stdlib.h>#defineLEN5typedefstruct{intlist[LEN];intsize;}Or... #include "stdafx.h"

#include <stdlib.h>

#define LEN 5

typedef struct
{
int list[LEN];
int size;
}OrderSeqLink;

////////初始化/////////
bool InitOrderSeqLink(OrderSeqLink **pLink)
{
*pLink=(OrderSeqLink *)malloc(sizeof(pLink));

if(NULL == *pLink)
{
return false;
}

(*pLink)->size=0;

return true;
}

///////求数据元素个数///////
int Length(OrderSeqLink Link)
{
return Link.size;
}

/////////插入数据元素/////////
bool InsertOrder(OrderSeqLink *pLink,int data)
{
int i=0;

if(pLink->size >= LEN)
{
printf("顺序表已满无法插入!");
return false;
}

if(pLink->size==0)
{
pLink->list[i]=data;
pLink->size++;
}
//int j=i;
for(i=0;i<LEN;i++)
{
int j=i;
if(pLink->list[i]>data)
{
for(j=pLink->size;j>i;j--)
{
pLink->list[j+1]=pLink->list[j];
}
pLink->list[i]=data;
pLink->size++;
pLink->list[i++];
}
else
{
pLink->list[i++];
}
}
return true;
}

///////打印函数///////
void show(OrderSeqLink *pLink)
{
for(int i=0;i<LEN;i++)
{
printf("%d ",pLink->list[i]);
}
}

int main(int argc, _TCHAR* argv[])
{
OrderSeqLink *pLink;

InitOrderSeqLink(&pLink);
InsertOrder(pLink,2);
InsertOrder(pLink,13);
InsertOrder(pLink,56);
InsertOrder(pLink,44);
InsertOrder(pLink,8);
show(pLink);

return 0;
}
展开
 我来答
zhang4109169
2013-09-02
知道答主
回答量:24
采纳率:100%
帮助的人:10.6万
展开全部
if(pLink->size==0)
{
pLink->list[i]=data;
pLink->size++;
}
这一段,你的i是局部变量,也就是你每次都给pLink->list[0]赋值。
更多追问追答
追问
谢谢,那应该改成全局变量吗
追答

你的for循环很乱,变量i反复被赋值,元素个数在循环中不停累加,超过了你的内存空间,所以程序就死掉了。下面是我按照你的思路临时写的一段代码,没调试过,你测试下。

bool InsertOrder(OrderSeqLink *pLink,int data)
{
    int i;

    if(pLink->size >= LEN)
    {
        printf("顺序表已满无法插入!");
        return false;
    }

    if(pLink->size==0)
    {
        pLink->list[i]=data;
        pLink->size++;
        return true;
    }

    for(int j=0;j<pLink->size;j++)
    {
        if(data < pLink->list[j]);            //传入数据小于表中元素
        {
            pLink->list[j] = data;                       //插入到该元素的位置
            for(int k=pLink->size;k>j;k--)
            {
                i = j;
                pLink->list[i+1] = pLink->list[i];           //表中元素后移
                i ++;
            }
            break;      //数据插入完成,跳出循环
        }
        else                  //传入数据大于或等于表中元素
        {
            if(pLink->size == j+1)                    //如表中已是最后一个元素
                pLink->list[pLink->size] = data;    //写入该位置
        }        
    }

    pLink->size ++;

    return true;

}
jues1991
2013-09-02 · TA获得超过477个赞
知道小有建树答主
回答量:935
采纳率:0%
帮助的人:374万
展开全部
你这个什么工程,又说是C语言。怎么有bool 类型,自动定义的还是什么?,
谁也不想全看你的代码,想帖一下来编译,一大堆错误。
追问
这是用结构体定义的啊。还有,为啥c里面不能用bool类型?怎么就不是c语言了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzviolet
2013-09-02 · TA获得超过2578个赞
知道大有可为答主
回答量:1196
采纳率:0%
帮助的人:1002万
展开全部
为啥不把出现问题的状况描述下?例如编译错误信息,或者运行错误状况等。要人完全无提示看你代码找错会让很多人失去看的动力。
更多追问追答
追问
编译没有错误,但是运行的时候崩溃了
追答
pLink->list[i++]; 

没仔细看你代码,但你这很诡异。 i 是控制循环的变量,而你在循环控制语句中已经有递增了,但这里又让i增量。等于循环中每次+2。这是否造成了 i 超出了限制,造成 list[i] 超出了数组范围造成了内存访问越界。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式