这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » keilC keilC 中建立单链表程序,大侠们看看是哪的毛病

共2条 1/1 1 跳转至

keilC keilC 中建立单链表程序,大侠们看看是哪的毛病

院士
2006-09-17 18:14:16     打赏
keilC keilC 中建立单链表程序,大侠们看看是哪的毛病



关键词: keilC     建立     单链表     程序     大侠     看看     毛病    

院士
2006-12-22 22:43:00     打赏
2楼
问 struct det{
  uchar hole;
  uint sn;   //序列号
  uchar  stat;  //状态
  struct det *next; //下一个地址
};
typedef struct det list;


/*---------------------建立单链表------------------------------------*/
list * creat(void) /*建立单链表的函数*/
{list *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/  
h=(list *)malloc(sizeof(list)); /*分配空间并检测*/
h->hole='\0';
h->sn='\0'; /*把表头结点的数据域置空*/
h->stat='\0';
h->next=NULL; /*把表头结点的链域置空*/
p=h; /*p指向表头*/
s= (list *) malloc(sizeof(list)); /*分配新存储空间并检测*/
p->next=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
s->hole=0;
s->sn=0;
s->stat=0;
s->next=NULL;
return h;
}

list * search(char n) /*查找链表的函数,n要查找的坑号,当前结点的坑号小于n,后结点的坑号小于n,用于执行插入前确定位置,返回<n的结点指针*/
{ list *p,*p1; /*p当前指针,指向要与所查找的坑号比较的结点,,p1后一结点的指针*/
  char y; /*保存结点数据域内坑号的变量*/  
  p=head->next;
  while(p!=NULL)
  { y=p->hole;
    p1=p->next;
    if((p->next)!=NULL&&y<n&&n<(p1->hole))   /*把数据域里的坑号与所要查找的坑号比较,若相同则返回0,即条件成立*/
      return p; /*返回与所要查找结点的地址*/     
    else
      p=p->next;      
   
  }
  if(p==NULL&&(p->hole)<n) return p;
}

void insert(n,pin1,st1) /*插入坑号为n,序列码为pin1,状态字为st1的结点*/
{ list *s; /*指针s是保存新结点地址的*/
  list *p;
  if(n!=1)
  { p=search(n);
    s= (list *)malloc(sizeof(list));
    s->hole=n;
    s->sn=pin1;
    s->stat=st1;  
    s->next=p->next; /*把新结点的链域指向原来p结点的后继结点*/
    p->next=s; /*p结点的链域指向新结点*/
  }
  else{
    s= (link) malloc(sizeof(list));
    s->hole=n;
    s->sn=pin1;
    s->stat=st1;  
    s->next=head->next; /*把新结点的链域指向原来p结点的后继结点*/
    head->next=s; /*p结点的链域指向新结点*/  
   
  }                                                                                                      
}

void main(void)
{ list *head;
  int y;
  y=init_mempool(0x1000,sizeof(list)*200);
  head=creat();
  insert(1,12345,0x81);
  insert(2,23540,0x85);  
}

各位GGJJ帮忙看看,这程序有什么毛病,我的本意是想建立的一个单链表,只有个头结点和尾,然后在插入两个结点,结果在执行插入操作时,这两个结点分配的空间地址s都为0x0000,所以导致每插入一个就将之前插入的那个结点给覆盖掉了,但是在创建链表程序中melloc函数返回的值却是正确的,郁闷 1: malloc 返回分配的地址空间,如果失败应该返回0

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]