wherem 2020-04-15 13:15 采纳率: 0%
浏览 758

通过键盘创建有若干个元素(可以是整型数值)的单链表,实现对单链表的初始化,对已建立的顺序表插入操作、删除操作、查找操作、遍历输出单链表?

通过键盘创建有若干个元素(可以是整型数值)的单链表,实现对单链表的初始化,对已建立的顺序表插入操作、删除操作、查找操作、遍历输出单链表。

要求各个操作均以函数的形式实现,并且在主函数中调用各个函数实现以下操作:

( 1 )键盘输入单链表 x 、 x 、 x 、 x 、 x 、 x ,并输出显示,其中 x 为任意整数。

( 2 )在单链表的第 4 个位置插入 67 ,并输出单链表中的各元素值。

( 3 )删除单链表中的第 2 个数据元素,并输出单链表中的各元素值。

( 4 )查找单链表中的第 5 个元素并输出该元素的值。

  • 写回答

1条回答 默认 最新

  • alfedf 2020-04-21 08:56
    关注
    #include <stdio.h>     
    #include <stdlib.h>     
    #define ERROR 0  
    typedef int ElemType;     
    
    
    /*定义结点类型*/  
    typedef struct  Node  
    {     
        ElemType  data;       //数据域  
        struct Node  *next;      //指针域  
    
    }Node,*LinkedList;  
    
    
    
    /*单链表的初始化*/  
    
    LinkedList LinkedListInit()     
    {     
        Node *L;     
        L=(LinkedList) malloc(sizeof(Node));/*申请结点空间*/  
        if(L == NULL)                       /*判断是否有足够的内存空间*/  
        printf("申请内存空间失败\n");     
        L->next=NULL;  
           /*将next设置为NULL,初始长度为0的单链表*/  
        return L;  
    }     
    
    
    /*单链表的建立,尾插法建立单链表*/  
    
    LinkedList LinkedListCreatT()     
    {     
        Node *L,*r;  
         int x;  
        L = (Node *)malloc(sizeof(Node));   /*申请头结点空间  */  
        L->next = NULL;                  /*初始化一个空链表  */  
        r = L;                          /*r始终指向终端结点,开始时指向头结点*/  
        while(scanf("%d",&x) != EOF)  
        {     
            Node *p;     
            p= (Node *)malloc(sizeof(Node));  
            p->data=x;   
            r->next=p;  
            r=p;                 
        }     
        r->next = NULL;      
        return L;        
    }     
    
    
    /*单链表的插入,在链表的第i个位置插入x的元素*/  
    
    LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)     
    {     
        Node *pre;  
        int tempi;                     /*pre为前驱结点*/  
        Node *p;  
        pre = L;     
        for (tempi = 1; tempi < i; tempi++)  
        pre=pre->next;                 /*查找第i个位置的前驱结点*/  
         Node *s;  
        s=(LinkedList)malloc(sizeof(Node));        //生成新结点  
       s->data=x;      
       s->next=pre->next;                               //插入L中  
       pre->next=s;  
                               /*插入的结点为p*/  
        return L;                                
    }      
    
    
    /*单链表的删除,在链表中删除第x个元素*/  
    
    LinkedList LinkedListDelete(LinkedList L,ElemType x)     
    {     
    
        Node *p,*q; /* q为前驱结点,p为查找的结点*/  
        int j;  
        p=L;  
        j=0;  
    
       while(p->next && j<x-1){                   //寻找第i个结点,并令p指向其前驱   
          p=p->next;++j;  
    
       if(!(p->next) || (j>x-1)) return ERROR;  //删除位置不合理  
       q=p->next;   
       p->next=q->next;           //删除并释放结点  
       free(q);  
       return L;  
    }      
      }   
    
    int GetElem_L(LinkedList L, int i, ElemType e)   
    {  
     /*L是带头结点的链表的头指针,以 e 返回第 i 个元素 */  
    
        Node *p;  
        int j;  
        p=L->next;  j=1;      /* p指向第一个结点,j为计数器 */  
       while(p && (j<i))  
       {                 //顺指针向后查找,直到p指向第i个元素  
           p=p->next;  ++j;            //或p为空  
        }  
    
      if ( !p || j>i )  return 0;     /* 第 i 个元素不存在   */  
        e=p->data;           /* 取得第 i 个元素   */  
         return e;  
    
    }  
    
    
    
    void LinkedListPrint(LinkedList L)  
     {  
    
       Node *start;   
    
        for(start = L->next; start != NULL; start = start->next )     
            printf("%d ",start->data);     
        printf("\n");   
         free(start);  
    
    }  
    
    
    int main()     
    {    int e1;  
        ElemType e=0;  
        LinkedList list;     
        list = LinkedListCreatT();   
        LinkedListPrint(list);  
        LinkedListInsert(list,4,67);     
        LinkedListPrint(list);  
        LinkedListDelete(list,2);      
        LinkedListPrint(list);  
        e1=GetElem_L(list, 5, e) ;  
        printf("第5个元素是 %d\n",e1);  
        free(list);  
        return 1;  
    }  
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题