请针对上面的课程编写一个接口ICourseList,加入以下方法: 添加add(Coursec)--向列表添加一个课程 获取get(int index)--获得编号为index的课程 容量size()--获得当前列表所有课程的总数 编写类CoursList实现这个接口,底层数据结构使用链表,编写完成后写主函数验证,添加10个不同课程,并打印所有存放在奇数位置的课名,打印所有课程总数。
时间: 2023-06-18 11:08:46 浏览: 89
add-contributors:一个Github操作,可自动将贡献者添加到您的文件中。 随时贡献!
好的,根据您的需求,我来给您编写一个 ICourseList 接口和 CoursList 类的实现:
```python
from abc import ABCMeta, abstractmethod
class ICourseList(metaclass=ABCMeta):
@abstractmethod
def add(self, course):
pass
@abstractmethod
def get(self, index):
pass
@abstractmethod
def size(self):
pass
class Course:
def __init__(self, name, teacher, duration):
self.name = name
self.teacher = teacher
self.duration = duration
def __str__(self):
return f"{self.name} ({self.teacher}) - {self.duration}h"
class CourseList(ICourseList):
class Node:
def __init__(self, val):
self.val = val
self.next = None
def __init__(self):
self.head = None
self.size_ = 0
def add(self, course):
node = CourseList.Node(course)
if self.head is None:
self.head = node
else:
curr = self.head
while curr.next is not None:
curr = curr.next
curr.next = node
self.size_ += 1
def get(self, index):
if index < 0 or index >= self.size_:
raise IndexError("Index out of bounds")
curr = self.head
for i in range(index):
curr = curr.next
return curr.val
def size(self):
return self.size_
if __name__ == "__main__":
courses = CourseList()
courses.add(Course("Python Programming", "John Smith", 40))
courses.add(Course("Data Structures", "Jane Doe", 30))
courses.add(Course("Algorithms", "Bob Johnson", 50))
courses.add(Course("Database Systems", "Alice Brown", 35))
courses.add(Course("Operating Systems", "Charlie Green", 45))
courses.add(Course("Computer Networks", "David Lee", 30))
courses.add(Course("Software Engineering", "Eva Chen", 40))
courses.add(Course("Web Development", "Frank Wang", 25))
courses.add(Course("Artificial Intelligence", "Grace Liu", 50))
courses.add(Course("Machine Learning", "Henry Wu", 45))
# Print all courses at odd positions
for i in range(1, courses.size(), 2):
course = courses.get(i)
print(course.name)
# Print total number of courses
print(f"Total number of courses: {courses.size()}")
```
以上代码中,我们定义了一个 ICourseList 接口,其中包括了添加课程、获取课程和获取总课程数三个方法。然后我们定义了一个 Course 类,表示课程,在 CoursList 类中使用链表存储了所有课程,并实现了 ICourseList 接口中的所有方法。最后在主函数中,我们添加了 10 个不同的课程,并打印了所有奇数位置的课程名和总课程数。
阅读全文