编写4个函数,功能分别为创建单链表,输出单链表,删除链表中的第i个结点,在第i个结点之前插入一个结点。在主程序中调用这些函数,并把运行结果截屏上传。 #include<stdio.h> #include<stdlib.h> typedef struct Lnode {int data; struct Lnode *next; }Lnode,*Linklist; Linklist create(int n)//创建一个含有n个结点的单链表 void print(Linklist L)//输出单链表L中的各个元素 void inserti(Linklist L,int i,int x) //在第i个结点之前插入一个数据域为x的结点 void deletei(Linklist L, int i)//删除链表中第i个结点 void main() {int n,i,x; Lnode *L; scanf("%d",&n); L=create(n); print(L); scanf("%d",&i); deletei(L,i); print(L); scanf("%d %d",&i,&x); inserti(L,i,x); print(L); }
时间: 2023-05-21 08:02:38 浏览: 130
创建单链表函数:该函数用于创建一个单链表,输入参数为链表的长度,返回值为链表的头结点。
输出单链表函数:该函数用于输出单链表中所有结点的值,输入参数为链表的头结点。
删除链表中的第i个结点函数:该函数用于删除单链表中的第i个结点,输入参数为链表的头结点和要删除的结点位置i。
在第i个结点之前插入一个结点函数:该函数用于在单链表中第i个结点之前插入一个新的结点,输入参数为链表的头结点、要插入的结点位置i和要插入的结点值。
主程序中调用这些函数,并将运行结果截屏上传。
相关问题
1.问题描述 单链表初始为空,给定插入位置和数据,插入结点实现单链表的创建。假设单链表中的结点计数从1开始。 2.算法 单链表结点的存储结构包含两部分:数据、下一结点指针 单链表的查找:给出位置i,若第i个结点存在(1<=i<=表中结点数L),返回结点地址;否则,返回NULL。 单链表的插入:给出位置i和数据e,在单链表第i(1<=i<=L+1)个结点位置插入新结点,数据为e。 输入 测试次数n 每行一组测试数据,格式如下: 位置i 数据e 输出 对每组测试数据,调用插入函数在位置i插入数据e,若插入成功,输出当前链表中的数据;若插入不成功,输出error。
算法实现如下:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def find_node(head: ListNode, i: int) -> ListNode:
"""
查找第i个结点,返回结点地址
"""
if i < 1:
return None
node = head
for _ in range(i-1):
if node:
node = node.next
else:
return None
return node
def insert_node(head: ListNode, i: int, e: int) -> ListNode:
"""
在第i个结点位置插入新结点,数据为e
"""
node = find_node(head, i)
if not node and i != 1:
print("error")
return head
new_node = ListNode(e)
if i == 1:
new_node.next = head
return new_node
new_node.next = node.next
node.next = new_node
return head
# 测试
n = int(input()) # 测试数据组数
for i in range(n):
inputs = input().split()
i, e = int(inputs[0]), int(inputs[1])
head = insert_node(head, i, e)
while head:
print(head.val, end=" ")
head = head.next
print()
```
其中,ListNode 类表示单链表中的结点,包含两部分:数据和下一结点指针。find_node 函数用于查找第 i 个结点,insert_node 函数用于在第 i 个结点位置插入新结点。最后,按照题目要求输出当前链表中的数据。
编写一个函数creat,用来建立一个动态链表。编写一个print函数,将链表中各结点的数据依次输出。编写一个del函数,用来删除动态链表中的一个指定的结点。编写一个函数insert,用来向动态链表中插入一个结点。最后将四个函数组成一个系统,由主函数先后调用这些函数,实现链表的建立输出删除插入,再主程序中指定需要删除和插入的结点。
好的,我能够为您提供关于建立、输出、删除和插入动态链表的函数。以下是相应的代码示例:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def create_list(self, data):
new_node = Node(data)
self.head = new_node
def insert_at_beginning(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def insert_at_end(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = new_node
def insert_at_pos(self, data, pos):
new_node = Node(data)
if pos == 0:
self.insert_at_beginning(data)
else:
curr, count = self.head, 0
while curr and count != pos-1:
curr = curr.next
count += 1
if not curr:
print("Position out of bounds")
return
new_node.next = curr.next
curr.next = new_node
def delete_at_pos(self, pos):
if not self.head:
print("Linked List is empty")
return
if pos == 0:
self.head = self.head.next
return
curr, count = self.head, 0
while curr and count != pos-1:
curr = curr.next
count += 1
if not curr or not curr.next:
print("Position out of bounds")
return
curr.next = curr.next.next
def print_list(self):
curr = self.head
while curr:
print(curr.data)
curr = curr.next
# Main program
my_list = LinkedList()
my_list.create_list(1)
my_list.insert_at_beginning(2)
my_list.insert_at_end(3)
my_list.insert_at_pos(4, 2)
my_list.delete_at_pos(1)
my_list.print_list()
```
这个例子展示了如何创建、输出、删除和插入数据到动态链表中。在这个例子中,我们定义了一个`Node`类,表示链表中的节点。然后,我们定义了`LinkedList`类,表示动态链表,并在该类中定义了用于创建、输出、删除和插入节点的方法。在主程序中,我们首先创建一个名为`my_list`的`LinkedList`对象,然后按顺序执行`create_list`、`insert_at_beginning`、`insert_at_end`、`insert_at_pos`和`delete_at_pos`等方法,最后输出整个链表。
希望这个例子能够对您有所帮助。如果您有任何其他问题,请随时问我。