本程序从键盘读入整数,并按从大到小的顺序输出输入正整数中互不相等的那些整数。程序以便读入整数,以便构造一个从大到 小顺序链接的的链表,直至不能从键盘读入整数,然后顺序输出链表上各节点的整数值。主函数每读入一个整数,就调用函数insert(),函数in sert()将还未出现杂链表上的正数按从大到小的顺序插如到链表中。 为了插入方便,链表杂表首有一个辅助节点。
#include <studio. h>
#include
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,将以上链表所占的内存释放。
代码补充并完善如下:
#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;
}
5肯定是head->next = NULL吧
你贴的代码怎么这么乱啊
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) /*寻找插入位置*/
{u=v;v=v->next;}
if(v==NULL|| x>= v->val )
{ /*判是否要插入新节点*/
p=(NODE *)malloc(sizeof(NODE));
p->val=x; /*生成新节点*/
p->next =v;
u->next =p; /*插入新节点*/
}
}
int main()
{
int x; NODE *head,*p; /*首先建立只有辅助节点的空链表*/
head=(NODE*)malloc(sizeof(NODE));
head->next =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);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!