本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.单链表倒置 【习题描述】 习题要求:
b. 给定一个不带头结点的单链表,写出将链表倒置的算法
用例:
假如输入为:
4
1 2 3 4
则输出为:
倒置前为:1 2 3 4
倒置后为:4 3 2 1
#include <iostream>
using namespace std;
struct Node {
Node(int x)
{
value = x;
next = NULL;
}
int value;
Node* next;
};
/*
TODO:链表倒置的算法
*/
Node* Reverse(Node* first)
{
Node*r= nullptr;
Node*p=first;
while (p){
Node*q=new Node(p->value);
p=p->next;
q->next=r;
r=q;
}
return r;
}
void print(Node* node)
{
while (NULL != node) {
cout << node->value << " ";
node = node->next;
}
}
int main()
{
int iNum;
cin >> iNum;
Node* a = NULL;
Node* pTemp;
for (int i = 0; i < iNum; i++) {
int tmp;
cin >> tmp;
if (i == 0) {
a = new Node(tmp);
pTemp = a;
} else {
pTemp->next = new Node(tmp);
pTemp = pTemp->next;
}
}
cout << "倒置前为:";
print(a);
cout << endl;
Node* r = Reverse(a);
cout << "倒置后为:";
print(r);
cout << endl;
return 0;
}
2.设计老师类和学生类。每个老师有姓名和研究方向,还可以指导若干个研究生。研究生的私有数据成 员包括姓名,专业和学号;编写一个程序,创建包含三个教师的数组。输入每个老师的指导所有研究 生的信息,输出所有教师的相关信息,包括指导学生情况。注意:要求不能使用友元函数!
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student(char*name_,char* major_,int id_);
Student();
~Student();
void Setstudent();
void show();
private:
char* name;
char* major;
int id;
};
class Teacher
{
public:
Teacher(char* name_, char* major_, int n_);
Teacher();
~Teacher();
void show();
private:
char* name;
char* major;
Student* student;
int n;
};
Student::Student(char* name_, char* major_, int id_):id(id_)
{
name = new char[20];
strcpy(name, name_);
major = new char[20];
strcpy(major, major_);
}
Student::Student(){
name = new char[20];
major = new char[20];
id = 0;
}
Student::~Student()
{
delete[]name;
delete[]major;
}
void Student::Setstudent() {
cout << "Student's name:" << endl;
cin >> name;
cout << "major:" << endl;
cin >> major;
cout << "id:" << endl;
cin >> id;
}
void Student::show() {
cout << "Student's name:" << name << endl << "major:" << major << endl << "id:" << id << endl;
}
Teacher::Teacher(char* name_, char* major_, int n_):n(n_)
{
name = new char[20];
strcpy(name, name_);
major = new char[20];
strcpy(major, major_);
student = new Student[n];
for (int i = 0; i < n; i++) {
student[i].Setstudent();
}
}
Teacher::Teacher() {
name = new char[20];
cout << "Teacher's name:" << endl;
cin >> name;
major = new char[20];
cout << "major:" << endl;
cin >> major;
cout << "How many students?" << endl;
cin >> n;
student = new Student[n];
for (int i = 0; i < n; i++) {
student[i].Setstudent();
}
}
Teacher::~Teacher()
{
delete[]name;
delete[]major;
delete[]student;
}
void Teacher::show() {
cout << "Teacher's name:" << name << endl << "major:" << major << endl;
for (int i = 0; i < n; i++) {
student[i].show();
}
}
int main() {
Teacher t[3];
for (int i = 0; i < 3; i++) {
t[i].show();
}
return 0;
}