回 帖 发 新 帖 刷新版面

主题:[讨论]急需帮忙......

[size=6][size=5][b]求助.....[/b][/size][/siz


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


typedef int elemtype;/*定义数据域类型*/
typedef struct linknode/*定义结点类型*/
{
 elemtype data;
 struct linknode *next;
 }nodetype;


 nodetype *creat()/*建立单链表,由用户输入各结点data域的值,以0表示结束*/
 {
   elemtype d;
   nodetype *h=NULL,*s,*t;
   int i=1;
   printf("建立一个单链表","\n");
   while(1)
  {
   printf("输入第i个结点的data域的值:");
   scanf("elemtype",&d);
   if(d==0) break;/*以0表示输入结束*/
      if(i==1)   /*建立第一个结点*/
      {
       h=(nodetype*)malloc(sizeof(nodetype));
       h->data=d;h->next=NULL;t=h;
       }
       else/*建立其他结点*/
       {
        s=(nodetype*)malloc(sizeof(nodetype));
        s->data=d;s->next=NULL;t->next=s;
        t=s;/*t始终指向生成的单链表的最后一个结点*/
        }
        i++;
  }
  return h;
 }


 int length(nodetype*h)/*返回单链表的长度*/
 {int i=0;
  nodetype *p=h;
  while(p!=NULL)
   {p=p->next;i++;}
   return i;
 }


 nodetype*find(nodetype*h,int i)/*返回第i个结点的指针*/
 {nodetype*p=h;
   int j=1;
   if(i>length||i<=0) return NULL;
   else
   {while(p!=NULL&&j<i)/*查找第i个结点,并由p指向该结点*/
    {j++;p=p->next;}
    return p;
    }
  }


  nodetype *insert(nodetype*h,int i,elemtype x)/*在单链表head中第i个结点(i>=0)
  之后插入一个data域为x的结点*/

  {nodetype*p,*s;
   s=(nodetype*)malloc(sizeof(nodetype));/*创建结点s*/
   s->data=x;s->next=NULL;
   if(i==0)/*i=0:s作为单链表的第一个结点*/
   {s->next=h;h=s;}
   else
   {p=find(h,i);/*查找第i个结点,并由p指向该结点*/
    if(p!=NULL)
    {s->next=p->next;p->next=s;}
    else printf("输入的i值不正确\n");
    }
    return h;
  }


  nodetype*delete(nodetype*h,int i)/*删除第i个结点*/
  {nodetype*p=h,*s;
   int j=1;
   if(i==1)/*删除第1个结点*/
   { h=h->next;free(p);}
   else
   {p=find(h,i-1);/*查找第i个结点,并由p指向该结点*/
     if(p!=NULL&&p->next!=NULL)
     {s=p->next;/*s指向要删除的结点*/
      s->next=p->next;free(s);
      }
      else printf("输入的i值不正确\n");
      }
      return h;
  }


  void disp(nodetype*h)/*输出由h指向的单链表的所有data域值*/
  {nodetype*p=h;
   printf("输出一个单链表\n");
   if(p=NULL)
   printf("空表");
   while(p!=NULL)
   {printf("p->data");
    p=p->next;
    }
    printf("\n");
  }


  nodetype*order(nodetype*h)
  {nodetype*head,*p=h,*q,*r,*t;
  head=(nodetype*)malloc(sizeof(nodetype));/*head为哨兵*/
  head->data=0;/*存放有序单链表的结点个数*/
  head->next=NULL;
  while(p!=NULL)
  {if(head->data=0)/*有序单链表为空的情况*/
    {head->next=p;
     q=p->next;
     p->next=NULL;
     p=q;
    }
    else
    {q=head->next;r=head;
      while(q!=NULL&&p->data>q->data)/*找到r结点,将p结点插入其后*/
      { r=q;
        q=q->next;
       }
     t=p->next;
     p->next=r->next;
     r->next=p;
     p=t;
    }
    head->data++;
    }
    t=head;
    head=head->next;
    free(t);/*删除哨兵*/
    return head;
  }


 nodetype*combine(nodetype*ha,nodetype*hb)
 {
   nodetype*hc=ha,*pa=ha,*pb=hb,*q,*r;
   if(length(pa)!=length(pb))
   {printf("两个单链表的长度不同\n");
    return NULL;
    }
    while(pa!=NULL)
    {q=pa->next;
     r=pb->next;
     pa->next=pb;
     pb->next=q;
     pa=q;
     pb=r;
     }
     return (hc);
  }


  void main()
 { int i,k;elemtype x;
   nodetype*head,*ha,*hb,*hc,*hd,*he;
   head=creat();
   disp(head);
   ha=insert(head,i,x);
    {scanf("%d,elemtype",&i,&x);}
   hb=delete(head,k);
    {scanf("%d",&k);}
   hc=order(ha);
   hd=order(hb);
   disp(hc);
   disp(hd);
   he=combine(hc,hd);
   disp(he);
 }


回复列表 (共1个回复)

沙发

什么都看不清
你字体放那么大干什么?

我来回复

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