一椰耶 2022-10-12 21:55 采纳率: 50%
浏览 25
已结题

怎么把这种链表程序补充完整啊?

本程序从键盘读入整数,并按从大到小的顺序输出输入正整数中互不相等的那些整数。程序以便读入整数,以便构造一个从大到 小顺序链接的的链表,直至不能从键盘读入整数,然后顺序输出链表上各节点的整数值。主函数每读入一个整数,就调用函数insert(),函数in sert()将还未出现杂链表上的正数按从大到小的顺序插如到链表中。 为了插入方便,链表杂表首有一个辅助节点。
#include <studio. h>
#include <malloc. h>
typedef struct node{ int val; struct node *next; }NODE;
void insert(NODE *list,int x){
NODE *u,*v,*p;
u=list;v=u->nest;
while((1)&&xval) /寻找插入位置/
{u=v;v=v->nest;}
if(v==NULL|| (2) ){ /判是否要插入新节点/
p=(NODE *)malloc(sizeof(NODE));
p->val=x; /生成新节点/
(3) =v;
(4) =p; /插入新节点/ } }
mian(){ int x; NODE *head,p; /首先建立只有辅助节点的空链表/
head=(NODE
)malloc(sizeof(NODE));
(5) =NULL;
printf("Enter integers:\n");
while(scanf("%d",&x)==1) /反复读入整数插入链表/
insert(head,x);
for(p=head->next;p!->NULL;p=p->next)
printf("%d\t", p->val); }
[问题] 1、写出上面带标号1-5的括号中该填入的内容;
2、写一个函数Sum,求以上链表中所有整数之和
3、写一个函数Destory,将以上链表所占的内存释放。

  • 写回答

3条回答 默认 最新

  • 关注

    代码补充并完善如下:

    
    #include <stdio.h>
    #include <malloc.h>
    typedef struct node { int val; struct node* next; }NODE;
    void insert(NODE* list, int x) {
        NODE* u, * v, * p;
        u = list; 
        v = u->next;
        while ( v!=NULL && x < v->val) /* 寻找插入位置 */  //(1)
        {
            u = v; 
            v = v->next; 
        }
        if (v == NULL || x > v->val ) {  //(2)
            /* 判是否要插入新节点 */
            p = (NODE*)malloc(sizeof(NODE));
            p->val = x; /* 生成新节点 */
            p->next = v;  //(3)
            u->next = p; /* 插入新节点*/ //(4)
        }
    }
    // 求以上链表中所有整数之和
    int Sum(NODE* head)
    {
        NODE* p = 0;
        int s = 0;
        if (head == NULL) return 0;
        p = head->next;
        while (p != NULL)
        {
            s += p->val;
            p = p->next;
        }
        return s;
    }
    // 将以上链表所占的内存释放
    void Destory(NODE** head)
    {
        NODE* p;
        while (*head)
        {
            p = (*head)->next;
            free(*head);
            *head = p;
        }
        *head = 0;
    }
    int main() 
    {
        int x; NODE* head, *p; /* 首先建立只有辅助节点的空链表 */
        head = (NODE*)malloc(sizeof(NODE));
        head->next = NULL; //(5)
        printf("Enter integers:\n");
        while (scanf("%d", &x) == 1) /* 反复读入整数插入链表 */
            insert(head, x);
        for (p = head->next; p!=NULL; p = p->next)
            printf("%d\t", p->val);
    
        //求链表的和
        printf("\nSum=%d\n", Sum(head));
        //释放链表内存
        Destory(&head);
        return 0;
    }
    
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月12日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料