大家觉得考试 2021-11-18 15:28 采纳率: 100%
浏览 51
已结题

数据结构,C语言,请求各位回答

创建一个单链表,除头结点之外有7个有效结点,存放数字分别为:32、28、45、67、14、18、29,建表过程要求使用头插入法。要求:在67与14之间插入结点,插入结点存放数字为100,将插入前和插入后的各结点数字输出。
可能使用到的函数:①初始化单链表;②头插入法建表;③单链表插入算法;④单链表输出算法;⑤主函数。

  • 写回答

1条回答 默认 最新

  • 关注
    #include <stdio.h>
    #include <stdlib.h>
    typedef int ElemType;
    typedef struct node 
    {
        ElemType data;
        struct node* next;
    }SlinkNode;
    
    //1初始化链表
    SlinkNode* InitLink(SlinkNode* h)
    {
        h = (SlinkNode*) malloc(sizeof(SlinkNode));
        h->next = NULL;
        return h;
    }
    
    //头插法
    SlinkNode* InsertHead(SlinkNode* h,ElemType e)
    {
        SlinkNode *t;
        t = (SlinkNode*)malloc(sizeof(SlinkNode));
        t->data = e;
        t->next = h->next;
        h->next = t;
        return h;
    }
    
    //显示链表
    void showList(SlinkNode* h)
    {
        SlinkNode* p = h->next;
        while (p)
        {
            printf("%d ",p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    
    //链表的长度
    int Length(SlinkNode* h)
    {
        SlinkNode* p = h->next;
        int len=0;
        while(p)
        {
            len++;
            p = p->next;
        }
        return len;
    }
    
    
    //在pos位置插入元素
    SlinkNode* InsertAt(SlinkNode* h,int pos,ElemType e)
    {
        SlinkNode* p,*t;
        if (pos <1 || pos > Length(h))
        {
            return 0;
        }
        t = (SlinkNode*)malloc(sizeof(SlinkNode));
        t->data = e;
        p = h;
        while(--pos && p)
        {
            p = p->next;
        }
        if(p) 
        {
            t->next = p->next;
            p->next = t;    
        }
        return h;
    }
    
    //释放内存
    void FreeList(SlinkNode* h)
    {
        SlinkNode* p;
        while(h)
        {
            p = h->next;
            free(h);h=0;
            h = p;
        }
    }
    
    int main()
    {
        SlinkNode* h = 0;
        int i;
        int a[7]={32,28,45,67,14,18,29};
        
        //初始化单链表h
        h = InitLink(h);
        //头插法建表
        for(i=6;i>=0;i--)
        {
            h = InsertHead(h,a[i]);
        }
        printf("插入前链表数据:");
        showList(h);
    
        
        //在67与14之间插入100(14的位置是5)
        h = InsertAt(h,5,100);
    
        //显示链表
        printf("插入100后链表数据:");
        showList(h);
    
        
        //释放链表
        FreeList(h);
        return 0;
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月18日

悬赏问题

  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?