创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。

话不多说,代码实现

#include<stdio.h>
#include<stdlib.h>

void Init(int arr[], int len){
	int i = 0;
	for (i = 0; i < len; ++i){
		arr[i] = i;
	}
}
void Print(int arr[], int len){
	int i = 0;
	for (i = 0; i < len; ++i){
		printf("%d ", arr[i]);
	}
	printf("\n");
}
void Empty(int arr[], int len){
	int i = 0;
	for (i = 0; i < len; i++){
		arr[i] = 0;
	}
}
void Reverse(int arr[], int len){
	//倒置思想
	int i = 0;
	int j = len - 1;
	int tmp = 0;
	while (i < j){
		tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
		i++;
		j--;
	}
}
int main(){
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Init(arr, len);
	Print(arr, len);
	Reverse(arr, len);
	Print(arr, len);
	Empty(arr, len);
	Print(arr, len);
	system("pause");
	return 0;
}
### C++ 单链表模板 `SingleList` 的实现 以下是一个完整的单链表模板类 `SingleList`,它实现初始化、删除节点、判断空以及链表等功能。代码基于标准模板库的设计理念,并结合了引用中的相关内容[^1]。 --- ### 定义与实现 ```cpp #include <iostream> using namespace std; // 节点结构定义 template<typename T> struct ListNode { T data; // 数据域 ListNode<T>* next; // 指针域 }; // 单链表模板类 template<typename T> class SingleList { private: ListNode<T>* head; // 头指针 public: /// 构造函数初始化单链表 SingleList() : head(nullptr) {} /// 析构函数:释放所有节点内存 ~SingleList() { clear(); } /// 初始化链表(清空) void init() { clear(); // 清除原有数据 head = nullptr; } /// 判断链表是否为空 bool isEmpty() const { return head == nullptr; } /// 插入节点到链表头部 void insertHead(const T& value) { ListNode<T>* newNode = new ListNode<T>{value, head}; // 新建节点 head = newNode; // 更新头指针 } /// 删除指定值的第一个匹配节点 bool deleteNode(const T& value) { if (isEmpty()) return false; // 若链表为空则无法删除 ListNode<T>* prev = nullptr; ListNode<T>* curr = head; while (curr && curr->data != value) { // 查找目标节点 prev = curr; curr = curr->next; } if (!curr) return false; // 未找到目标节点 if (prev) { // 中间或尾部节点 prev->next = curr->next; } else { // 头部节点 head = curr->next; } delete curr; // 释放被删除节点的内存 return true; } /// 链表 void reverse() { if (isEmpty()) return; // 空链表无需 ListNode<T>* prev = nullptr; ListNode<T>* curr = head; ListNode<T>* next = nullptr; while (curr) { next = curr->next; // 保存下一个节点 curr->next = prev; // 当前节点指向其前驱 prev = curr; // 前驱前进一步 curr = next; // 当前节点前进一步 } head = prev; // 更新头指针为新链表的首节点 } /// 清空链表 void clear() { ListNode<T>* curr = head; while (curr) { ListNode<T>* temp = curr; curr = curr->next; delete temp; // 逐个释放节点内存 } head = nullptr; // 重头指针 } /// 打印链表内容 void print() const { ListNode<T>* curr = head; while (curr) { cout << curr->data << " -> "; curr = curr->next; } cout << "nullptr" << endl; } }; ``` --- ### 功能说明 #### 1. 初始化 (`init`) - 方法用于重新初始化链表,清除所有已有节点并将头指针设为 `nullptr`。 - 时间复杂度:O(n),其中 n 是当前链表长度。 #### 2. 判断空 (`isEmpty`) - 返回布尔值表示链表是否为空。 - 时间复杂度:O(1)。 #### 3. 插入节点到头部 (`insertHead`) - 在链表头部插入一个新节点,时间复杂度为 O(1)。 - 使用头插法便于后续实现链表功能。 #### 4. 删除节点 (`deleteNode`) - 根据给定值删除链表中第一个匹配的节点。 - 如果找不到对应值,则返回 `false`;否则返回 `true` 并成功删除节点。 - 时间复杂度:O(n)。 #### 5. 链表 (`reverse`) - 使用三指针方法(`prev`, `curr`, `next`)逐步翻转链表方向。 - 不需要额外存储空间即可完成原地。 - 时间复杂度:O(n)。 #### 6. 清空链表 (`clear`) - 逐一释放链表中所有节点的内存,并将头指针设为 `nullptr`。 - 时间复杂度:O(n)。 #### 7. 打印链表 (`print`) - 遍历整个链表并打印每个节点的数据部分。 - 结束标志为 `nullptr` 表示链表终止。 --- ### 测试示例 ```cpp int main() { SingleList<int> list; // 初始化链表 list.init(); // 插入几个节点 list.insertHead(1); list.insertHead(2); list.insertHead(3); // 打印原始链表 cout << "Original List: "; list.print(); // 链表 list.reverse(); cout << "Reversed List: "; list.print(); // 删除节点 list.deleteNode(2); cout << "After Deleting Node with Value 2: "; list.print(); // 判断是否为空 if (list.isEmpty()) { cout << "The list is empty." << endl; } else { cout << "The list is not empty." << endl; } // 清空链表 list.clear(); if (list.isEmpty()) { cout << "The list has been cleared and is now empty." << endl; } return 0; } ``` --- ### 输出结果 假设运行以上测试代码,可能得到如下输出: ``` Original List: 3 -> 2 -> 1 -> nullptr Reversed List: 1 -> 2 -> 3 -> nullptr After Deleting Node with Value 2: 1 -> 3 -> nullptr The list is not empty. The list has been cleared and is now empty. ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值