随机刷新的NPC 2021-10-09 16:47 采纳率: 92.3%
浏览 29
已结题

这个怎样才能把那两个数顺序交换一下?

线性表L采用链式存储结构linklist,实现有序线性表中插入元素操作
【样例输入】

5

1 2 3 4 5

3
【样例输出】

1 2 3 3 4 5

6


#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define error 0
#define ok 1
#define    overflow    -2
typedef int status;
typedef int elemtype;
typedef struct lnode{
    elemtype data;//数据域 
    struct lnode *next;//指针域 
}lnode, *linklist;

//带头结点单链表的3个基本函数及1个辅助函数:
status  initlist(linklist &l) //初始化;
{
  l=(linklist)malloc(sizeof(lnode));
  l->next=NULL;
  return ok;
}

status  inputlist(linklist &l) //输入,尾插法 ;
{ int i,n ; linklist p,q;
  //printf("please input the length of the linklist:");
  scanf("%d",&n);
  q=l;
  //printf("please input the data of the linklist:");
  for (i=n;i>=1;i--)  {
      p=(linklist)malloc(sizeof(lnode));
      scanf("%d",&p->data);
      p->next=NULL;
      q->next=p;
      q=p;
      }
  return ok;
}

status  listtraverse(linklist l)// 输出,先输出数据元素、后输出长度;
{
  int j; linklist p;
  p=l->next; j=0;
  //printf("the data of the linklist:");
  p=l->next;
  while (p!=NULL) 
  { printf("%d ",p->data);
    p=p->next;
    j++;
  }
  printf("\n");
  //printf("the length of the linklist:");
  printf("%d\n",j);
  return ok;
}

status destroylist(linklist &l) //撤销;
 { linklist p,q;
   q=l;p=l->next;
   while (p!=NULL) 
   { q->next=p->next;
     free(p);
     p=q->next;
   }
   free(l);
   return ok;
 }
 status orderlistinsert(linklist &l,elemtype e)
 {
     linklist p;
     linklist s;
     p=l->next;
     while(p){
         if(e<p->data){
              s = (linklist)malloc(sizeof(lnode));//生成新结点 
              s->data = e;
             s->next = p->next;
             p->next = s;
            return ok;
             //s=p->data;
             //p->data=e;
            // p->next->data=s;
         }
         p=p->next;
     }
     return ok;
 }
int main()
{ 
  linklist l;elemtype e;
  initlist(l);
  inputlist(l);
  scanf("%d",&e);
  orderlistinsert(l,e);
  listtraverse(l);
  return 0;
}


img

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-10-09 20:17
    关注

    修改如下,供参考:

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    #define error 0
    #define ok 1
    #define    overflow    -2
    typedef int status;
    typedef int elemtype;
    typedef struct lnode{
        elemtype data;//数据域
        struct lnode *next;//指针域
    }lnode, *linklist;
    //带头结点单链表的3个基本函数及1个辅助函数:
    status  initlist(linklist &l) //初始化;
    {
      l=(linklist)malloc(sizeof(lnode));
      l->next=NULL;
      return ok;
    }
    status  inputlist(linklist &l) //输入,尾插法 ;
    {
      int i,n ;
      linklist p,q;
      //printf("please input the length of the linklist:");
      scanf("%d",&n);
      q=l;
      //printf("please input the data of the linklist:");
      for (i=n;i>=1;i--)  {
          p=(linklist)malloc(sizeof(lnode));
          scanf("%d",&p->data);
          p->next=NULL;
          q->next=p;
          q=p;
      }
      return ok;
    }
    status  listtraverse(linklist l)// 输出,先输出数据元素、后输出长度;
    {
      int j;
      linklist p;
                                    //p=l->next;
      j=0;
      //printf("the data of the linklist:");
      p=l->next;
      while (p!=NULL) 
      {
        printf("%d ",p->data);
        p=p->next;
        j++;
      }
      printf("\n");
      //printf("the length of the linklist:");
      printf("%d\n",j);
      return ok;
    }
    status destroylist(linklist &l) //撤销;
    {
       linklist p,q;
       q=l;
       p=l->next;
       while (p!=NULL)
       {
         q->next=p->next;
         free(p);
         p=q->next;
       }
       free(l);
       return ok;
    }
    status orderlistinsert(linklist &l,elemtype e)
    {
         linklist p,pr;
         linklist s;
         pr = l;
         p=l->next;
         while(p && p->data <e)
         {
             pr = p;
             p = p->next;
         }
         s = (linklist)malloc(sizeof(lnode));//生成新结点
         s->data = e;
         s->next = pr->next;
         pr->next = s;
         return ok;
    }
    
    int main()
    {
      linklist l;
      elemtype e;
      initlist(l);
      inputlist(l);
      listtraverse(l);
    
      scanf("%d",&e);
      orderlistinsert(l,e);
      listtraverse(l);
    
      return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 创建了问题 10月9日