大家觉得考试 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 速帮,学校需要在外上班没空
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义