回 帖 发 新 帖 刷新版面

主题:急!小弟的程序设计,不知道哪里有错,请各位高手指点!

题目:采用单链表作存储结构,编写一个程序采用选择排序方法进行升序排序。

这是小弟我编的,虽然能运行,但是输出结果却是ASCⅡ码的,求各位高手帮我改改,谢谢啦!
#include <stdio.h>
#include <alloc.h>

typedef int datatype;
typedef struct node
{
   datatype data;
   struct node *next;
} linklist;
linklist *head;

linklist *CREATLISTF()
{
    int ch;
    linklist *head,*s;
    head=NULL;
    ch=getchar();
    while(ch!=1)
    {
        s=malloc(sizeof(linklist));
        s->data=ch;
        s->next=head;
        head=s;
        ch=getchar();
        }
        return head;
}
PRINTF(linklist *head)
{
   while (head!=NULL)
   {
    printf("%d",head->data);
    head=head->next;
   }
}

void select(linklist *L)
{ linklist *p,*s,*r,*q;
   p=q=L->next;
  while(L!=NULL)
{  p=q=L;
    while(p!=NULL)
{ if(p->data<q->data)
{r=q;q=p;p=r;}
p=p->next;
}
L=L->next;
}
}

main()
{
  linklist *t,*n;

  t=CREATLISTF();
  n=PRINTF(t);
  select(t);
  PRINTF(t);
}


回复列表 (共4个回复)

沙发

因为你的输出函数中输出格式就是%d啊,不然你想输出什么类型的结果?

板凳

#include <stdio.h>
#include <malloc.h>



typedef int datatype;
typedef struct node
{
   datatype data;
   struct node *next;
} linklist;
linklist *head;

linklist *CREATLISTF()
{
    int ch;
    linklist *head,*s;
    head=NULL;
    //ch=getchar();
    // 不要用getchar
    // 如果用getchar,存储的每个整数都是对应的ASCII码
    scanf("%d", &ch);
    while(ch!=-1)
    {
        s=(linklist *)malloc(sizeof(linklist));
        s->data=ch;
        s->next=head;
        head=s;
        scanf("%d", &ch);
        }
        return head;
}
void PRINTF(linklist *head)
{
   while (head!=NULL)
   {
    printf("%d  ",head->data);
    head=head->next;
   }
   return;
}

void select(linklist *L)
{ linklist *p,*s,*r,*q;
   p=q=L->next;
  while(L!=NULL)
{  p=q=L;
    while(p!=NULL)
{ if(p->data<q->data)
{r=q;q=p;p=r;}
p=p->next;
}
L=L->next;
}
}

main()
{
  linklist *t,*n;

  t=CREATLISTF();
  // PRINTF没有返回值啊
  //n=PRINTF(t);
  PRINTF(t);
  select(t);
  PRINTF(t);
}

有几处语法错误

3 楼


贴代码时也不test下

4 楼


创建链表的算法不是很好!
推荐一个:
linklist *CREATLISTF()
{
  int ch;
  linklist *head,*s,*r;
  head=malloc(sizeof(linklist));
  r=head;
  scanf("%d",&ch);
  while(ch!=1)
  {
     s=malloc(sizeof(linklist));
     s->data=ch;
     r->next=s;
     r=s;
     scanf("%d",&ch);;
  }
  if(r->next!=NULL)
    r->next=NULL;
  return head;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册