2024-2025 20241323 第七周任务总结
这个作业属于https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
这个作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01
• 这个作业的目标自学教材
o 计算机科学概论(第七版)第8章 并完成云班课测试
o 《C语言程序设计》第6章并完成云班课测试
作业正文https://www.cnblogs.com/gly03/p/18537537
教材学习内容总结
数组
数组是一种线性数据结构,其元素在内存中连续存储。数组的每个元素都可以通过索引直接访问,这使得数组在需要快速访问元素时非常高效。然而,数组的缺点是插入和删除操作(特别是在数组中间位置)可能涉及大量元素的移动,因此效率较低。
C语言中的数组示例:
c复制代码
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
printf("%d\n", array[2]); // 输出: 3
return 0;
}
链表
链表也是一种线性数据结构,但与数组不同,链表的元素在内存中不必连续存储。链表通过指针将各个元素(节点)链接在一起。链表的优点是可以高效地执行插入和删除操作(特别是在链表中间位置),因为只需要修改相关节点的指针。然而,链表的缺点是访问特定元素需要从头节点开始遍历链表,这可能导致较低的效率。
C语言中的链表示例(单向链表):
c复制代码
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表头部
void insertAtHead(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
insertAtHead(&head, 1);
insertAtHead(&head, 2);
insertAtHead(&head, 3);
printList(head); // 输出: 3 -> 2 -> 1 -> NULL
return 0;
}
无序表与有序表
无序表是指元素没有特定顺序的集合,而有序表则是指元素按照某种顺序(如升序或降序)排列的集合。数组和链表都可以用来实现无序表或有序表。对于有序表,通常需要在插入新元素时保持元素的顺序,这可能需要额外的比较和移动操作。
树
树是一种非线性数据结构,由节点(包含数据)和连接节点的边组成。树有多种类型,包括二叉树、平衡树(如AVL树、红黑树)、搜索树(如二叉搜索树)等。树在存储和检索数据时非常有用,特别是在需要快速查找、插入和删除操作的场景中。
图
图也是一种非线性数据结构,由节点(顶点)和连接节点的边组成。图可以是有向的或无向的,边的权重可以是有权的或无权的。图在表示复杂关系(如社交网络、地图等)时非常有用。
子程序与参数
子程序(或函数)是代码的可重用模块,用于执行特定任务。参数是传递给子程序的数据,可以是输入值、输出值或引用。在C语言中,函数参数可以是基本数据类型(如int、float等)、指针或结构体等。通过函数参数,可以实现数据的传递和共享,以及函数间的交互。
C语言中的子程序与参数示例:
c复制代码
#include <stdio.h>
// 子程序:计算两个整数的和
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 3); // 调用子程序并传递参数
printf("%d\n", result); // 输出: 8
return 0;
}
这些概念和数据结构是C语言编程的基础,掌握它们有助于设计和实现高效、可维护的程序。
函数
函数是C语言程序的基本组成模块,用于执行特定的任务或计算。每个函数都有一个唯一的名称,可以通过这个名称来调用它。函数可以接受输入参数(也称为形参),并可以返回一个值(称为返回值)。
函数的定义:
c复制代码
返回类型 函数名(参数列表) {
// 函数体
// 执行特定的任务
// 可以使用return语句返回一个值(如果函数有返回值的话)
}
例如,一个计算两个整数之和的函数可以这样定义:
c复制代码
int add(int a, int b) {
return a + b;
}
函数的调用:
在C语言中,使用函数名后跟一对圆括号(可以包含参数)来调用函数。例如:
c复制代码
int result = add(5, 3); // 调用add函数,并传递5和3作为参数
数组
数组是一种数据结构,用于存储相同类型的多个元素。这些元素在内存中连续存储,并且可以通过索引来访问。数组的每个元素都有一个唯一的索引,该索引从0开始。
数组的定义:
c复制代码
数据类型 数组名[数组大小];
例如,一个包含5个整数的数组可以这样定义:
c复制代码
int numbers[5];
也可以在定义数组的同时初始化它:
c复制代码
int numbers[5] = {1, 2, 3, 4, 5};
数组的访问:
通过数组名和索引来访问数组中的元素。例如:
c复制代码
int value = numbers[2]; // 访问数组中索引为2的元素,其值为3
数组的传递:
在C语言中,数组名在函数参数中会被解释为指向数组第一个元素的指针。因此,当数组作为参数传递给函数时,实际上传递的是指向数组首元素的指针。
例如,一个打印数组元素的函数可以这样定义和调用:
c复制代码
#include <stdio.h>
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5); // 调用printArray函数,并传递numbers数组和它的大小作为参数
return 0;
}
在这个例子中,printArray函数接受一个整数数组和一个整数作为参数,然后遍历数组并打印每个元素。注意,在函数定义中,数组的大小并不需要显式指定,因为函数接收的是指向数组首元素的指针,而数组的大小则通过另一个参数传递。
总之,函数和数组是C语言编程中的基本概念,它们对于实现各种算法和数据结构至关重要。通过理解和应用这些概念,可以编写出高效、可维护的C语言程序。