概述
数据结构 线性表算法(一)
实现线性表的一些基础算法,包括:
插入,删除,合并,合并排序线性表
// 线性表算法.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);
}
最后
以上就是冷艳啤酒为你收集整理的数据结构 线性表算法(一)的全部内容,希望文章能够帮你解决数据结构 线性表算法(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复