一个程序出了点毛病求大神指正啊啊啊

时间:2022-04-18 11:09:40
  要求      已知L为无头结点单链表中第一个结点的指针,每个结点数据域存放一个字符,该字符可能是英文字母字符或数字字符或其它字符,编写算法构造三个以带头结点的单循环链表表示的线性表,使每个表中只含同一类字符。(要求用最少的时间和最少的空间)

啊啊啊,头疼死了。。。求大神有空看一下有什么错误
等待指正的程序:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct list{
char date;
    struct list *next;
}list;
list *build()//*构建无头结点的字符串*// 
{
char q=getchar();
list *l,*s,*p;
l=(list *)malloc(sizeof(list));
l->next=NULL;
p=l;
while(q!='$'){
s=(list *)malloc(sizeof(list));
s->date=q;
p->next=s;
p=s;
q=getchar();
}//*字符链输入以$结束*// 
p->next=NULL;
p=l->next;
free(l);
return p;
}//build
void sort(list *l,list *a,list *b,list *c)
{
list *d,*e,*f;
d=a,e=b,f=c; 
while(!l){
if(l->date>=48&&l->date<=57){
a->next=l;
a=a->next;
l=l->next;
}//*数据是0到9字符的链放到a链中*// 
else if((l->date<=90&&l->date>=65)||(l->date>=97&&l->date<=122)){
b->next=l;
b=b->next;
l=l->next;
}//*数据是字母的链放到b链中*// 
else {
c->next=l;
c=c->next;
l=l->next;
} //*数据是其他字符的链放到c链中*// 
}
    a->next=d;
b->next=e;
c->next=f;//*构成循环链表*// 
}//sort
void print(list *x){
list *y;
y=x;
while(x->next!=y){
printf("%c ",x->next->date);//*输出单循环链 *//
x=x->next;
}
printf("\n");
}//print
int main()
{
list *l,*a,*b,*c;
a=(list *)malloc(sizeof(list));
b=(list *)malloc(sizeof(list));
c=(list *)malloc(sizeof(list));//*构建三个头结点*// 
l=build();
sort(l,a,b,c);
print(a);
print(b);
print(c);
return 0;
}

8 个解决方案

#1


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct list{
char date;
struct list *next;
}list;
list *build()//*构建无头结点的字符串*// 
{
char q=getchar();
list *l,*s,*p;
l=(list *)malloc(sizeof(list));
l->next=NULL;
p=l;
while(q!='$'){
s=(list *)malloc(sizeof(list));
s->date=q;
p->next=s;
p=s;
q=getchar();
}//*字符链输入以$结束*// 
p->next=NULL;
p=l->next;
free(l);
return p;
}//build
void sort(list *l,list *a,list *b,list *c)
{
list *d,*e,*f;
d=a,e=b,f=c; 
while(l){
if(l->date>=48&&l->date<=57){
a->next=l;
a=a->next;
l=l->next;
}//*数据是0到9字符的链放到a链中*// 
else if((l->date<=90&&l->date>=65)||(l->date>=97&&l->date<=122)){
b->next=l;
b=b->next;
l=l->next;
}//*数据是字母的链放到b链中*// 
else {
c->next=l;
c=c->next;
l=l->next;
} //*数据是其他字符的链放到c链中*// 
}
a->next=d;
b->next=e;
c->next=f;//*构成循环链表*// 
}//sort
void print(list *x){
list *y;
y=x;
while(x->next!=y){
printf("%c ",x->next->date);//*输出单循环链 *//
x=x->next;
}
printf("\n");
}//print
int main()
{
list *l,*a,*b,*c;
a=(list *)malloc(sizeof(list));
b=(list *)malloc(sizeof(list));
c=(list *)malloc(sizeof(list));//*构建三个头结点*// 


l=build();


sort(l,a,b,c);
print(a);
print(b);
print(c);
return 0;
}


你没下断点调试一下么 .....   
惩罚你一下  你猜我改哪里了....

#2


注意结贴~~~~

#3


该回复于2014-03-12 09:19:48被管理员删除

#4


引用 2 楼 a510579741 的回复:
注意结贴~~~~

还是没输出啊= =怎么回事。。。。

#5


额 你输入什么了.... 亲

#6


引用 5 楼 a510579741 的回复:
额 你输入什么了.... 亲

字符串啊= =

#7


额 如果你没输入$那就真是根本停不下来了~~~~~
一个程序出了点毛病求大神指正啊啊啊
这是我程序运行的结果 因为你的源程序要求$作为停止符

#8


引用 5 楼 a510579741 的回复:
额 你输入什么了.... 亲

当时我没发现while里面的! 改了= =

#1


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct list{
char date;
struct list *next;
}list;
list *build()//*构建无头结点的字符串*// 
{
char q=getchar();
list *l,*s,*p;
l=(list *)malloc(sizeof(list));
l->next=NULL;
p=l;
while(q!='$'){
s=(list *)malloc(sizeof(list));
s->date=q;
p->next=s;
p=s;
q=getchar();
}//*字符链输入以$结束*// 
p->next=NULL;
p=l->next;
free(l);
return p;
}//build
void sort(list *l,list *a,list *b,list *c)
{
list *d,*e,*f;
d=a,e=b,f=c; 
while(l){
if(l->date>=48&&l->date<=57){
a->next=l;
a=a->next;
l=l->next;
}//*数据是0到9字符的链放到a链中*// 
else if((l->date<=90&&l->date>=65)||(l->date>=97&&l->date<=122)){
b->next=l;
b=b->next;
l=l->next;
}//*数据是字母的链放到b链中*// 
else {
c->next=l;
c=c->next;
l=l->next;
} //*数据是其他字符的链放到c链中*// 
}
a->next=d;
b->next=e;
c->next=f;//*构成循环链表*// 
}//sort
void print(list *x){
list *y;
y=x;
while(x->next!=y){
printf("%c ",x->next->date);//*输出单循环链 *//
x=x->next;
}
printf("\n");
}//print
int main()
{
list *l,*a,*b,*c;
a=(list *)malloc(sizeof(list));
b=(list *)malloc(sizeof(list));
c=(list *)malloc(sizeof(list));//*构建三个头结点*// 


l=build();


sort(l,a,b,c);
print(a);
print(b);
print(c);
return 0;
}


你没下断点调试一下么 .....   
惩罚你一下  你猜我改哪里了....

#2


注意结贴~~~~

#3


该回复于2014-03-12 09:19:48被管理员删除

#4


引用 2 楼 a510579741 的回复:
注意结贴~~~~

还是没输出啊= =怎么回事。。。。

#5


额 你输入什么了.... 亲

#6


引用 5 楼 a510579741 的回复:
额 你输入什么了.... 亲

字符串啊= =

#7


额 如果你没输入$那就真是根本停不下来了~~~~~
一个程序出了点毛病求大神指正啊啊啊
这是我程序运行的结果 因为你的源程序要求$作为停止符

#8


引用 5 楼 a510579741 的回复:
额 你输入什么了.... 亲

当时我没发现while里面的! 改了= =