注册 登录
编程论坛 数据结构与算法

一个建立链表的错误,帮忙看下 3Q

C_snow 发布于 2010-12-09 13:25, 489 次点击
错误提示:

只有本站会员才能查看附件,请 登录


#include <stdio.h>
#include <stdlib.h>

typedef int elemtype;
typedef struct SLnode
{
 elemtype Data;
 SLnode *next;
}slnodetype;


int main()
{
 slnodetype *head;
 elemtype x;
 int n;
 int i;
 slnodetype *CreateSL(int n);
 void PrintSL(slnodetype *h);
 int InsertSL(slnodetype *h,int i,elemtype x);
 int DeleteSL(slnodetype *h,int i);

 scanf("%d",&n);
 head=CreateSL(n);
 PrintSL(head);
 printf("\n\n\n\n");
 printf("请输入你要插入的位置:\n");
 scanf("%d",i);
 if(InsertSL(head,i,x))
    PrintSL(head);
 printf("请输入你要删除的位置\n");
 scanf("%d",&i);
 if(DeleteSL(head,i))
    PrintSL(head);   
 getchar();
 
 return 0;
 }
 
 
slnodetype *CreateSL(int n)
 {
  int i;
  slnodetype *p,*s,*head;
  if((head=(slnodetype *)malloc(sizeof(slnodetype)))==NULL)
  {
  printf("不能分配空间!\n");
  exit(0);
  }
  head->next=NULL;
  p=head;
  for(i=0;i<n;i++)
  {
     if((s=(slnodetype *)malloc(sizeof(slnodetype)))==NULL)
     {
      printf("不能分配空间\n");
      exit(0);                  
     }
     p->next=s;
     s->next=NULL;
     p=s;
     scanf("%d",&(s->Data));
 
  }
  return (head);   
 }
 
 void PrintSL(slnodetype *h)
 {
  slnodetype *p1;
  p1=h;
  while(p1->next!=NULL)
  {
    p1=p1->next;
    printf("%d\n",p1->Data);   
  }
 }

int InsertSL(slnodetype *h,int i,elemtype x)
{
 slnodetype *p,*s;
 int j;
 p=h;
 j=0;
 while(p->next!=NULL&&j<i-1)
 {
  p=p->next;
  j++;                           
 }   
 if(j!=i-1)
 {
  printf("输入位置不合理\n");
  return 0;         
 }
 if((s=(slnodetype *)malloc(sizeof(slnodetype)))=NULL) return 0;
 scanf("%d",&x);
 s->Data=x;
 s->next=p->next;
 p->next=s;
 
 return 1;
}

int DeleteSL(slnodetype *h,int i)
{
 slnodetype *p,*s;
 int j=0;
 p=h;
 while(p->next->next!=NULL&&j<i-1)
 {
  p=p->next;
  j++;                              
 }   
 if(j!=i-1)
 {
  printf("删除位置不合理\n");         
 }
 s=p->next;
 p->next=p->next->next;
 free(s);
 return 1;
}
2 回复
#2
佳嘉2010-12-09 15:57
第一个问题:
printf("请输入你要插入的位置:\n");
scanf("%d",i);这里有问题
if(InsertSL(head,i,x))

第二个问题:
 return 0;         
}
if((s=(slnodetype *)malloc(sizeof(slnodetype)))=NULL) return 0; 有问题
scanf("%d",&x);


#3
C_snow2010-12-09 16:05
3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q
1