练习创建和释放链表:【改编例8.4】输入一组整型整数,以-1结束。输出它们的总和、最大数和最小数。
时间: 2024-05-01 22:18:02 浏览: 7
好的,我会为您提供一个链表的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
typedef struct node node;
node *create_node(int val){
node *new_node = (node*)malloc(sizeof(node));
new_node->data = val;
new_node->next = NULL;
return new_node;
}
void insert_node(node **head, int val){
node *new_node = create_node(val);
if(*head == NULL){
*head = new_node;
}else{
node *temp = *head;
while(temp->next != NULL){
temp = temp->next;
}
temp->next = new_node;
}
}
void delete_node(node **head, int val){
node *temp, *prev;
temp = *head;
prev = NULL;
while(temp != NULL && temp->data != val){
prev = temp;
temp = temp->next;
}
if(temp == NULL){
printf("Node with value %d not found\n", val);
}else{
if(prev == NULL){
*head = temp->next;
}else{
prev->next = temp->next;
}
free(temp);
}
}
void display_list(node *head){
node *temp = head;
while(temp != NULL){
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int get_list_length(node *head){
int len = 0;
node *temp = head;
while(temp != NULL){
len++;
temp = temp->next;
}
return len;
}
int find_max(node *head){
int max_val = head->data;
node *temp = head->next;
while(temp != NULL){
if(temp->data > max_val){
max_val = temp->data;
}
temp = temp->next;
}
return max_val;
}
int find_min(node *head){
int min_val = head->data;
node *temp = head->next;
while(temp != NULL){
if(temp->data < min_val){
min_val = temp->data;
}
temp = temp->next;
}
return min_val;
}
int find_sum(node *head){
int sum = 0;
node *temp = head;
while(temp != NULL){
sum += temp->data;
temp = temp->next;
}
return sum;
}
int main(){
node *head = NULL;
int val;
printf("Please enter a list of integers, ending with -1:\n");
scanf("%d", &val);
while(val != -1){
insert_node(&head, val);
scanf("%d", &val);
}
printf("The list is: ");
display_list(head);
int len = get_list_length(head);
int max_val = find_max(head);
int min_val = find_min(head);
int sum = find_sum(head);
printf("The list contains %d nodes\n", len);
printf("The maximum value in the list is: %d\n", max_val);
printf("The minimum value in the list is: %d\n", min_val);
printf("The sum of all values in the list is: %d\n", sum);
return 0;
}
```
这段代码可以创建一个链表并且支持插入、删除、查找最大值、最小值和求和等操作。您只需要输入整数,以-1结束,程序就会输出对应的结果。