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;
} 展开
#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;
} 展开
3个回答
展开全部
if(pLink->size==0)
{
pLink->list[i]=data;
pLink->size++;
}
这一段,你的i是局部变量,也就是你每次都给pLink->list[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;
}
展开全部
你这个什么工程,又说是C语言。怎么有bool 类型,自动定义的还是什么?,
谁也不想全看你的代码,想帖一下来编译,一大堆错误。
谁也不想全看你的代码,想帖一下来编译,一大堆错误。
追问
这是用结构体定义的啊。还有,为啥c里面不能用bool类型?怎么就不是c语言了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为啥不把出现问题的状况描述下?例如编译错误信息,或者运行错误状况等。要人完全无提示看你代码找错会让很多人失去看的动力。
更多追问追答
追问
编译没有错误,但是运行的时候崩溃了
追答
pLink->list[i++];
没仔细看你代码,但你这很诡异。 i 是控制循环的变量,而你在循环控制语句中已经有递增了,但这里又让i增量。等于循环中每次+2。这是否造成了 i 超出了限制,造成 list[i] 超出了数组范围造成了内存访问越界。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询