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个结点的单链表,对单链表的数据进行排序,我用的是冒泡排序。可是子函数代码哪里错了?我找不出,求解!!! 展开
#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个结点的单链表,对单链表的数据进行排序,我用的是冒泡排序。可是子函数代码哪里错了?我找不出,求解!!! 展开
展开全部
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询