目录
一、R7-2 顺序表(删除)
1、偷懒方法
2、C++代码
3、Python代码
二、R7-3 单链表的创建及遍历
1、偷懒方法
2、C++代码
3、Python代码
三、R7-4 在有序链表中插入数据
1、C++代码
2、Python代码
已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素
输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。
删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)
在这里给出一组输入。例如:
10
55 11 9 15 67 12 18 33 6 22
10 20
在这里给出相应的输出。例如:
55 9 67 33 6 22
#include
int main()
{
int x, y, n, a[99], i;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d %d", &x, &y);
for (i = 0; i < n; i++)
{
if (a[i] >= x && a[i] <= y)
continue;
else
{
if (i == 0)
printf("%d", a[i]);
else
printf(" %d", a[i]);
}
}
return 0;
}
#include
#include
using namespace std;
vector deleteElements(vector& seqList, int x, int y) {
vector newList;
for (int num : seqList) {
if (num < x || num > y) {
newList.push_back(num);
}
}
return newList;
}
int main()
{
int n;
cin >> n; // 元素个数
vector seqList(n);
for (int i = 0; i < n; i++)
{
cin >> seqList[i]; // 顺序表元素
}
int x, y;
cin >> x >> y; // 区间x和y
// 删除元素
vector newList = deleteElements(seqList, x, y);
// 输出新顺序表
for (int i = 0; i < newList.size(); i++)
{
cout << newList[i];
if (i != newList.size() - 1)
{
cout << " ";
}
}
return 0;
}
def delete_function(seq_list, x, y):
new_list = []
for num in seq_list:
if num < x or num > y:
new_list.append(num)
return new_list
# 读取输入
n = int(input()) # 元素个数
seq_list = list(map(int, input().split())) # 顺序表元素
x, y = map(int, input().split()) # 区间x和y
# 删除元素
new_list = delete_function(seq_list, x, y)
# 输出新顺序表
print(' '.join(map(str, new_list)), end='')
读入n值及n个整数,建立单链表并遍历输出。
读入n及n个整数。
输出n个整数,以空格分隔(最后一个数的后面没有空格)。
在这里给出一组输入。例如:
2
10 5
在这里给出相应的输出。例如:
10 5
#include
int main()
{
int n, a[99];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (int i = 0; i < n; i++)
{
if (i == 0)
printf("%d", a[i]);
else
printf(" %d", a[i]);
}
return 0;
}
#include
using namespace std;
// 定义单链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 建立单链表
ListNode* buildLinkedList(int n) {
ListNode* head = nullptr;
ListNode* tail = nullptr;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
ListNode* newNode = new ListNode(num);
if (head == nullptr) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 遍历输出单链表
void traverseLinkedList(ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->val;
if (curr->next != nullptr) {
cout << " ";
}
curr = curr->next;
}
}
int main() {
int n;
cin >> n; // 读入n值
// 建立单链表
ListNode* head = buildLinkedList(n);
// 遍历输出单链表
traverseLinkedList(head);
return 0;
}
n = int(input())
nums = list(map(int, input().split()))
print(*nums)
给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。
输入有两行:
第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。
第二行是要插入的数。
输出插入后的链表数据,以空格分开。行末不能有多余的空格。
在这里给出一组输入。例如:
5 1 3 6 9 11
4
在这里给出相应的输出。例如:
1 3 4 6 9 11
在这里给出一组输入。例如:
5 1 3 6 9 11
3
在这里给出相应的输出。例如:
1 3 6 9 11
#include
#include
typedef struct Node
{
int data;
struct Node *next;
}LNode, *LinkList;
void InsertList(LinkList L, int x)
{
LinkList p, pp, q;
pp = (LinkList) malloc (sizeof(LNode));
pp -> data = x;
for (q = L -> next; q && q -> data != x; q = q -> next);
if (q != NULL) return;
for (p = L; p -> next && p -> next -> data < x; p = p -> next);
pp -> next = p -> next;
p -> next = pp;
}
void PrintList(LinkList L)
{
LinkList p = L -> next;
while (p)
{
if (p -> next != NULL)
{
printf("%d ", p -> data);
p = p -> next;
}
else
{
printf("%d", p -> data);
p = p -> next;
}
}
}
int main()
{
int n, t, i;
LinkList L = (LinkList) malloc (sizeof(LNode));
L -> next = NULL;
if (scanf("%d", &n) == 1)
{
for (i = 0; i < n + 1; i++)
{
if (scanf("%d", &t) == 1)
InsertList(L, t);
}
PrintList(L);
}
return 0;
}
n, *data = map(int, input().split())
x = int(input())
inserted = False
for i in range(n):
if x in data: # 如果x已经存在于数据列表中,无需插入,直接跳出循环
break
if x < data[0]: # 如果比一号位还小,则放在第一位
data.insert(0, x)
inserted = True
break
if data[i] > x: # 找到第一个大于x的位置,将x插入在该位置之前
data.insert(i, x)
inserted = True
break
if not inserted and x not in data: # 比所有元素都大的话,放在最后
data.append(x)
print(*data) # 输出插入后的数据