JJLin. 2021-11-08 18:14 采纳率: 100%
浏览 277
已结题

逐个输出单链表中所有数据元素。

  1. 定义一个单链表类(参照P45-P48),在此基础上添加如下成员函数:
    (1)编写一个成员函数:逐个输出单链表中所有数据元素。
    (2)编写一个成员函数:单链表定位操作。其定位功能为:在单链表中查找是否存在数据元素x,如果存在,返回单链表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。
    (3)编写一个成员函数:删除单链表中所有值为x的元素。
    (4)编写一个成员函数:就地逆置单链表中的数据元素。
    (5)编写一个成员函数:将单链表中数据元素就地排序。所谓就地排序是指在排序过程中利用原有的结点,不额外增加新结点。
    (6)编写一个成员函数:在单链表有序的前提下,插入一个数据元素x,要求插入后的单链表中数据元素从小到大有序排列。
  2. 将1按要求编写完成后,编写代码进行测试。
  • 写回答

1条回答 默认 最新

  • 如果可以1996 2021-11-09 11:58
    关注
    定义一个单链表类
    typedef struct node
    { int data;
      struct node *next;
    }linklist;
    (1)逐个输出单链表中所有数据元素。
    void Printlist(linklist *q)
    {
      while(q)
      {
        printf("%d ",q->data);
        q=q->next;
      }
    }
    (2)单链表定位操作。其定位功能为:在单链表中查找是否存在数据元素x,如果存在,返回单链表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。
    int ListLocate_L(linkList L, ElemType x)
    {
        linkList p=L;
        int i=0;
        while(p->next!=0)
        {
           if(p->next->data==x){
               return i;
          } else{
           p=p->next;
           i++;
        } 
        return -1;
    ] 
    (3)删除单链表中所有值为x的元素。
    void delete_X(linkList L,int x){
        linkList p = L->next, pre = L, q; //p指针从第一个元素结点开始,pre指针从头结点开始
        while(p != NULL){
            if(p->val == x){
                q = p; //复制给辅助指针q用来释放空间
                p = p->next; //p往后遍历
                pre->next = p; //将pre->next指向当前p
                free(q); //上一个值为X的元素已经从链表中删除,释放结点空间
            } else {
                p = p->next; // 这里注意 p 和 pre都要后移,因为pre始终是p的前驱
                pre = pre->next;
            }
        }
    }
    
    (4)就地逆置单链表中的数据元素。
    linklist *InverseLinklist(linklist *q)
    {
         linklist *p,*head;
          p=head->next;
         if(p!=NULL) {
           p=p->next;
           head->next->next=NULL;       
         }
         while(p!=NULL){
           q=p->next;
           p->next=head->next;
           head->next=p;
           p=q;            
      }  
    }
    (5)将单链表中数据元素就地排序。所谓就地排序是指在排序过程中利用原有的结点,不额外增加新结点。
    
    void SortSingleList(listlist *head)
    {
        listlist *pre=head,*p=pre->next,*q,*r;    //pre指向head,p指向第一个元素
        q=p->next; //q指向待比较节点
        p->next=NULL;    //第一个节点next截止 NULL
        while(q!=NULL)
        {
            while(pre->next!=NULL && q->data>pre->next->data)//查找插入点的前驱节点
                pre=pre->next;
            r=q->next;    //保存待比较的下一个节点
     
            q->next=pre->next; 
            pre->next=q;    //插入节点
            
            pre=head;    //恢复pre的head
            q=r;    //q指向下一个待比较节点
        }
    }
    
    (6)在单链表有序的前提下,插入一个数据元素x,要求插入后的单链表中数据元素从小到大有序排列。
    linklist  *Insert(linklist *head,int x)
    {
         linklist  *s,*q;
         s=(linklist*)malloc(sizeof(linklist));
         s->data=x;
         q=head;
         if(q->data>x){
           s->next=q;
           head=s;
        }else{
          while(q!=NULL)
         {
            if(q->next->data>x){
              s->next=q->next;
              q->next=s;
              break;                
            }      
         q=q->next;
         }
        q=head;
       }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型