数据结构 线性表算法(一)
实现线性表的一些基础算法,包括:
插入,删除,合并,合并排序线性表
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115// 线性表算法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // 这个文件主要用于实现一些线性表的功能,包括顺序线性表,静态链表,循环链表,双向链表 // 以及一个用链表实现的多项式 // 为了方便和演示算法,顺序线性表直接使用了C++ STL库中的vector #include "pch.h" #include <iostream> #include <vector> using namespace std; /* 插入:把目标data插入到指定pos的后面,如果要从头部插入,输入的pos需要是-1 args: A为目标线性表 pos为插入的位置 data为插入的数据 */ void insert(vector<int> &A, int pos, int data) { if (pos < -1 || pos > A.size()) return; if (pos == A.size()) { A.resize(A.size() + 1); A[pos] = data; return; } A.resize(A.size() + 1); for (int i = A.size()-1; i >= pos+2; i--) // 1 2 3 4 5-> 1 2 2 3 4 5 A[i] = A[i - 1]; A[pos + 1] = data; } /* 删除线性表A中第pos个元素 */ void Delete(vector<int> &A, int pos) { if (pos < 0 || pos > A.size()) return; for (int i = pos; i < A.size() - 1; i++) A[i] = A[i + 1]; A.resize(A.size() - 1); } /* 合并两个线性表 把线性表B拼接到线性表A后面 */ void Merge(vector<int> &A, vector<int> &B) { int m = A.size(), n = A.size() + B.size(); A.resize(n); for (int i = m; i < n; i++) A[i] = B[i-m]; //其实这里可以使用push_back函数,但是在这里我尽量避免使用STL库自带的函数 } /* 合并两个排序的线性表,保证合并之后还是排序的 这里使用了一个新的线性表来保存 如果要设置没有重复元素只需要判断A[i] == B[j]时,只加入1个元素,并且i,j同时右移 */ vector<int> Merge_sorted(const vector<int> &A, const vector<int> &B) { vector<int> res(A.size() + B.size(), 0); int i = 0, j = 0, k = 0; while (i < A.size() && j < B.size()) { if (A[i] <= B[j]) { res[k] = A[i]; k++; i++; } else { res[k] = B[j]; k++; j++; } } while (i < A.size()) { res[k] = A[i]; i++; k++; } while (j < B.size()) { res[k] = B[j]; k++; j++; } return res; } // 输出一个线性表的内容 void printVector(const vector<int> &tar) { for (int i = 0; i < tar.size(); i++) cout << tar[i] << " "; cout << endl; } int main() { vector<int> A = { 1, 3, 3, 5, 7}; vector<int> B = {9}; printVector(A); Merge(A, B); printVector(A); printVector(Merge_sorted(A, B)); insert(A, 0, 2); printVector(A); Delete(A, 1); printVector(A); }
最后
以上就是冷艳啤酒最近收集整理的关于数据结构 线性表算法(一)的全部内容,更多相关数据结构内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复