C语言单链表创建和排序问题代码问题,我运行时老是程序错误,不知道哪里错了?

#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode;v... #include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode;

void Delete(LNode *L,int k);
void createL(LNode *L,int n);
void display(LNode *L);
LNode* paixu(LNode *L);
int length(LNode *L);

int main(int argc, char *argv[])
{

LNode *L; int n; int k;
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
printf("请输入个数:");
scanf("%d",&n);
createL(L,n);
display(L);
printf("排序后:");
paixu(L);
display(L);
printf("\n请输入你要删除的位置");
scanf("%d",&k);

Delete(L,k);
display(L);

return 0;
}
void createL(LNode *L,int n)
{

int x;
LNode *p,*q;
q=L;
while(n!=0)
{
scanf("%d",&x);
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
q->next=p;
q=p;
n--;

}
q->next=NULL;
}

void display(LNode *L)
{
LNode *p;
p=L->next;
printf("\n链表为");
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}

}
void Delete(LNode *L,int k)
{
LNode *q,*p;
int i=0;
q=L;
if(q->next==NULL)
{
printf("链表为空,无删除操作");
return;
}

for(i=1;i<k;i++)
{
q=q->next;
if(q->next==NULL)
{
printf("位置不存在");
return;
}
}

p=q->next;
q->next=q->next->next;
free(p);

}

LNode *paixu(LNode *L)
{
LNode *p;
int n = changdu(L);
p=L->next;
int i,j,temp;
if(p==NULL)
{
printf("链表为空,无删除操作");
return NULL;
}

for(i=0;i<n-1;i++)
{ p=L->next;
for(j=0;j<n-i;j++)
{
if(p->data > p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
}
p = p->next;
}

}
return L;

}

int length(LNode *L)
{
LNode* p;
int count=0;
p=L->next;
if(p==NULL) return 0;

else {

while(p){
count++;
p=p->next;
}
return count;
}
}

系统应该是认定我的排序代码错了,可是我不知道哪里错了?要求是输入一个n,然后创建n个结点的单链表,对单链表的数据进行排序,我用的是冒泡排序。可是子函数代码哪里错了?我找不出,求解!!!
展开
 我来答
郝在益
2017-11-05 · TA获得超过2079个赞
知道小有建树答主
回答量:1496
采纳率:54%
帮助的人:632万
展开全部

1、首先说说你的命名问题,不说其他的,在你的工程中,至少要统一化,比如这个函数命名,要么都是小写,要么都是开头大写,这样更让人容易理解。

2、关于英文的问题,推荐你一个软件,有道翻译,我都是边写边查找翻译的。

3、关于冒泡排序的问题,你可以在看看在百度百科上的例子。我其实不太习惯官方的冒泡排序方式,我更喜欢借鉴他的实现原理而稍微改一改。

4、定义变量的时候最好还是初始化一下,这样排除错误的时候可以方便很多。

下面是改好的代码:

#include <stdio.h> 
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode;

void Delete(LNode *L, int k);
void CreateList(LNode *L, int n);
void Display(LNode *L);
LNode* Sort(LNode *L);
int Length(LNode *L);

int main(int argc, char *argv[])
{

LNode *L = NULL;
int n = 0; 
int k = 0;
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
printf("请输入个数:");
scanf("%d", &n);
CreateList(L, n);
Display(L);
printf("排序后:");
Sort(L);
Display(L);
printf("\n请输入你要删除的位置:");
scanf("%d", &k);

Delete(L, k);
Display(L);

return 0;
}
void CreateList(LNode *L, int n)
{

int x = 0;
LNode *p = NULL, *q = NULL;
q = L;
while (n != 0)
{
scanf("%d", &x);
p = (LNode *)malloc(sizeof(LNode));
p->data = x;
q->next = p;
q = p;
n--;

}
q->next = NULL;
}

void Display(LNode *L)
{
LNode *p = NULL;
p = L->next;
printf("\n链表为");
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
}
printf("\n"); //增加一个回车
}
void Delete(LNode *L, int k)
{
LNode *q = NULL, *p = NULL;
int i = 0;
q = L;
if (q->next == NULL)
{
printf("链表为空,无删除操作");
return;
}

for (i = 1; i < k; i++)
{
q = q->next;
if (q->next == NULL)
{
printf("位置不存在");
return;
}
}

p = q->next;
q->next = q->next->next;
free(p);

}

LNode *Sort(LNode *L)
{
LNode *p = NULL;
int n = Length(L);
p = L->next;
int i, j, temp;

/* 这里不需要*/
//if (p == NULL)   
//{
// printf("链表为空,无删除操作");
// return NULL;
//}

for (i = 0; i < n - 1; i++)
{
p = L->next;
for (j = i + 1; j < n; j++) //这里改为这样
{
if (p->data > p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
}
p = p->next;
}

}
return L;
}

int Length(LNode *L)
{
LNode* p = NULL;
int count = 0;
p = L->next;

while (p)
{
count++;
p = p->next;
}
return count;
}

仙亦佛
2017-11-04 · TA获得超过366个赞
知道小有建树答主
回答量:707
采纳率:59%
帮助的人:429万
展开全部
changdu()应该是lenght()。
追答
int main(void),main无需参数。
创建和删除属于修改了结点数量,都必须返回链表头指针。删除时,要判断要删除的结点是头,尾,中间等各种情况下的操作。建议你对每个函数单独测试,这样才好找到问题所在。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式