📅  最后修改于: 2023-12-03 15:22:49.261000             🧑  作者: Mango
单向链表(Singly Linked List)是一种常用的数据结构,由多个节点(Node)组成,每个节点存储一个元素和指向下一个节点的指针。在链表中,每个节点只记录其后继节点的地址,因此,访问链表中的某个元素需要从链表的头节点开始遍历整个链表,直到找到目标元素。
本篇文章将介绍使用单向链表来存储一组数值,计算节点的乘积。
我们可以使用以下步骤来实现计算节点的乘积:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}Node, *List;
//定义链表节点的结构体,并将其定义为指向结构体的指针类型
void initList(List *head)
{
*head=(Node*)malloc(sizeof(Node));//开辟一个头节点的空间
(*head)->next=NULL;//头节点指针域为空
}
//初始化链表函数
void add(List head, int x)
{
List p=head;
if(head)
{
List newnode=(Node*)malloc(sizeof(Node));//为新节点开辟空间
newnode->data=x;//为新节点的数据域赋值
newnode->next=NULL;//新节点指针域为空
while(p->next)
{
p=p->next;//查找尾节点
}
p->next=newnode;//将新节点挂在尾节点的指针域上
}
}
//在链表尾添加元素函数
void printList(List head)
{
List p=head->next;
while(p)
{
printf("%d ", p->data);
p=p->next;
}
}
//遍历链表,输出节点的内容函数
int mulList(List head)
{
List p=head->next;
int product=1;
while(p)
{
product*=p->data;//计算每个节点的乘积
p=p->next;
}
return product;
}
//计算链表所有节点的乘积函数
int main()
{
List head;
initList(&head);
//初始化链表
int i,n,x;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
add(head, x);//添加元素到链表尾部
}
printf("The linked list:\n");
printList(head);//遍历链表,输出节点内容
printf("\n");
int product=mulList(head);//计算链表所有节点的乘积
printf("The product of linked list nodes is %d.\n",product);//输出节点的乘积
return 0;
}
假设用户输入如下数据:
5
1 2 3 4 5
程序输出如下:
The linked list:
1 2 3 4 5
The product of linked list nodes is 120.
本文介绍了使用单向链表来存储一组数值,并计算节点的乘积的方法。使用单向链表存储数据可以方便地进行插入、删除等操作。本文实现的方法比较简单,可以根据实际需求来选择更加复杂的算法。