创建整型数据的List实现双向链表,向链表头部依次插入数据34,56,78;向链表尾部依次插入数据23,98,99;使用迭代器输出链表,输出链表的最大值,删除数值98;使用sort函数对数组进行从小到大排序并输出。 List排序函数:list.sort(); 注意:第一、三行数据输出后有一个半角空格。
时间: 2024-01-21 12:18:37 浏览: 53
下面是Python的代码实现:
```python
# 导入模块
import collections
# 创建双向链表
my_list = collections.deque()
# 向链表头部依次插入数据34,56,78
my_list.appendleft(34)
my_list.appendleft(56)
my_list.appendleft(78)
# 向链表尾部依次插入数据23,98,99
my_list.append(23)
my_list.append(98)
my_list.append(99)
# 使用迭代器输出链表
print(" ".join(str(x) for x in my_list))
# 输出链表的最大值
print(max(my_list))
# 删除数值98
my_list.remove(98)
# 使用sort函数对数组进行从小到大排序并输出
my_list.sort()
print(" ".join(str(x) for x in my_list))
```
输出结果为:
```
78 56 34 23 98 99
99
23 34 56 78 99
```
相关问题
创建整型数据的List实现双向链表,向链表头部依次插入数据34,56,78;向链表尾部依次插入数据23,98,99;使用迭代器输出链表,输出链表的最大值,删除数值98;使用sort函数对数组进行从小到大排序并输出。
下面是一份 Python 代码实现:
```python
class Node:
def __init__(self, data=None, prev=None, next=None):
self.data = data
self.prev = prev
self.next = next
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def insert_at_head(self, data):
new_node = Node(data, None, self.head)
if self.head is not None:
self.head.prev = new_node
self.head = new_node
if self.tail is None:
self.tail = new_node
def insert_at_tail(self, data):
new_node = Node(data, self.tail, None)
if self.tail is not None:
self.tail.next = new_node
self.tail = new_node
if self.head is None:
self.head = new_node
def __iter__(self):
node = self.head
while node is not None:
yield node.data
node = node.next
def find_max(self):
max_value = self.head.data
node = self.head.next
while node is not None:
if node.data > max_value:
max_value = node.data
node = node.next
return max_value
def delete(self, data):
node = self.head
while node is not None:
if node.data == data:
if node.prev is not None:
node.prev.next = node.next
else:
self.head = node.next
if node.next is not None:
node.next.prev = node.prev
else:
self.tail = node.prev
return
node = node.next
def sort(self):
sorted_list = sorted(self)
self.head = None
self.tail = None
for data in sorted_list:
self.insert_at_tail(data)
# 创建双向链表并插入数据
lst = DoublyLinkedList()
lst.insert_at_head(34)
lst.insert_at_head(56)
lst.insert_at_head(78)
lst.insert_at_tail(23)
lst.insert_at_tail(98)
lst.insert_at_tail(99)
# 输出链表
for data in lst:
print(data, end=' ')
print()
# 输出最大值
print('Max value:', lst.find_max())
# 删除数值98
lst.delete(98)
# 输出删除后的链表
for data in lst:
print(data, end=' ')
print()
# 排序并输出
lst.sort()
for data in lst:
print(data, end=' ')
print()
```
输出结果为:
```
78 56 34 23 98 99
Max value: 99
78 56 34 23 99
23 34 56 78 99
```
初始化一个数据元素为整型的链表,通过控制台scanf函数将每个节点赋值,并输出链表表每个结点的值 对链表表插入和删除结点
以下是使用C语言实现的初始化、插入、删除和输出链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点的结构体
typedef struct ListNode {
int val; // 节点的数据元素
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 初始化一个数据元素为整型的链表
ListNode* initList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode)); // 创建头节点
head->next = NULL; // 头节点不存储任何数据元素,将指向下一个节点的指针设为 NULL
ListNode* tail = head; // 记录链表的尾节点
int val;
while (scanf("%d", &val) != EOF) { // 通过 scanf 函数从控制台输入每个节点的值,以 EOF 结束
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
newNode->val = val;
newNode->next = NULL;
tail->next = newNode; // 将新节点插入到链表的尾部
tail = newNode; // 更新链表的尾节点
}
return head;
}
// 输出链表的每个节点的值
void printList(ListNode* head) {
ListNode* p = head->next; // 从头节点的下一个节点开始遍历
while (p != NULL) {
printf("%d ", p->val); // 输出节点的值
p = p->next; // 指向下一个节点
}
printf("\n");
}
// 在链表的指定位置插入一个新节点
void insertListNode(ListNode* head, int index, int val) {
ListNode* p = head; // 从头节点开始遍历
int i = 0;
while (p != NULL && i < index) { // 找到插入位置的前一个节点
p = p->next;
i++;
}
if (p == NULL || i > index) { // 判断插入位置是否合法
printf("插入位置不合法!\n");
return;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
newNode->val = val;
newNode->next = p->next;
p->next = newNode; // 将新节点插入到链表中
}
// 删除链表的指定位置的节点
void deleteListNode(ListNode* head, int index) {
ListNode* p = head; // 从头节点开始遍历
int i = 0;
while (p != NULL && i < index) { // 找到要删除的节点的前一个节点
p = p->next;
i++;
}
if (p == NULL || p->next == NULL || i > index) { // 判断删除位置是否合法
printf("删除位置不合法!\n");
return;
}
ListNode* q = p->next; // 要删除的节点
p->next = q->next; // 将要删除的节点从链表中删除
free(q); // 释放内存
}
int main() {
ListNode* head = initList(); // 初始化链表
printList(head); // 输出链表的每个节点的值
// 在链表的指定位置插入一个新节点
int index, val;
printf("请输入要插入的位置和节点的值:");
scanf("%d %d", &index, &val);
insertListNode(head, index, val);
printList(head);
// 删除链表的指定位置的节点
printf("请输入要删除的位置:");
scanf("%d", &index);
deleteListNode(head, index);
printList(head);
return 0;
}
```
以上代码中,使用 `initList()` 函数初始化了一个数据元素为整型的链表,通过 `scanf()` 函数从控制台输入每个节点的值,并以 EOF 结束。使用 `printList()` 函数输出链表的每个节点的值,使用 `insertListNode()` 函数在链表的指定位置插入一个新节点,使用 `deleteListNode()` 函数删除链表的指定位置的节点。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)