实践写了一个链表的DEMO程序,全部写在了一个.cpp文件中,要求;头文件为必须的文件 (即不能所有程序都写在.cpp程序里面),并且必须包含“定义警卫”,也就是说在.cpp文件里被多次tinclude也不会报告错误!
3)程序文件 (必须合理分为多个程序
文件,,正常分为2个程序一般就可以),希望有人能解答。
下面我将提供一个基于单链表的DEMO程序,分为头文件和源文件两部分。内容包括链表结点的定义、链表的创建、插入、删除和遍历等操作。希望能够帮助您。
首先是头文件list.h,这个文件中包含了结构体Node的定义和链表操作的函数声明,并添加了定义警卫,以确保多次包含不会报错。
#ifndef LIST_H
#define LIST_H
// 定义单链表结点结构体
struct Node {
int val; // 存储结点的值
Node* next; // 指向下一个结点的指针
};
// 链表操作函数声明
Node* create(int n);
Node* insert(Node* head, int pos, int val);
Node* remove(Node* head, int pos);
void print(Node* head);
#endif /* LIST_H */
然后是源文件list.cpp,该文件实现了链表操作函数的具体功能。
#include "list.h"
#include <iostream>
using namespace std;
// 创建包含n个结点的链表,结点的值从1到n
Node* create(int n) {
Node* head = new Node();
Node* p = head;
for (int i = 1; i <= n; i++) {
Node* q = new Node();
q->val = i;
p->next = q;
p = q;
}
p->next = nullptr;
return head->next;
}
// 在链表的第pos个位置插入一个值为val的结点
Node* insert(Node* head, int pos, int val) {
Node* p = new Node();
p->val = val;
if (pos == 1) {
p->next = head;
head = p;
} else {
Node* q = head;
for (int i = 1; i < pos - 1; i++) {
if (q == nullptr) {
break; // 超出链表长度,无法插入
}
q = q->next;
}
if (q == nullptr) {
cout << "插入位置超出链表长度!" << endl;
} else {
p->next = q->next;
q->next = p;
}
}
return head;
}
// 删除链表中第pos个结点
Node* remove(Node* head, int pos) {
if (pos == 1) {
Node* p = head;
head = head->next;
delete p;
} else {
Node* p = head;
for (int i = 1; i < pos - 1; i++) {
if (p == nullptr) {
break; // 超出链表长度,无法删除
}
p = p->next;
}
if (p == nullptr || p->next == nullptr) {
cout << "删除位置超出链表长度!" << endl;
} else {
Node* q = p->next;
p->next = q->next;
delete q;
}
}
return head;
}
// 遍历链表并输出每个结点的值
void print(Node* head) {
Node* p = head;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
最后是主程序文件main.cpp,在这个文件中,我们可以调用链表操作函数来创建、插入和遍历链表,并进行简单的测试。
#include "list.h"
#include <iostream>
using namespace std;
int main() {
int n = 5; // 链表长度
Node* head =
不知道你这个问题是否已经解决, 如果还没有解决的话: