线性表:顺序表
基本算法:按值查找,尾插,指定位置插入,删除,有序表合并
//数据结构 第二章线性表 顺序表
//2021.8.7
//by Walnut from NWU
#include<iostream>
#include<stack>
#include<cmath>
#define MAXSIZE 10
using namespace std;
typedef struct {
int data[MAXSIZE];
int length;
}List;
void initList(List* l) {//表的初始化
l->length = 0;
for (int i = 0; i < 10; i++) {
l->data[i] = 0;
}
}
int insertList(List* l, int n) {//表尾插入,若超过表最大长度,返回-1
if (l->length == MAXSIZE)
return -1;
l->data[l->length] = n;
l->length++;
}
int insertList(List* l, int pos, int n) {//指定位置插入,失败返回-1
if (l->length == MAXSIZE)
return -1;
for (int i = l->length; i >= pos; i--) {
l->data[i] = l->data[i - 1];
}
l->data[pos - 1] = n;
l->length++;
}
int delList(List* l, int pos) {//删除指定位置元素,失败返回-1
if (pos > l->length || l->length == 0)
return -1;
for (int i = pos; i < l->length; i++) {
l->data[i - 1] = l->data[i];
}
l->length--;
}
void coutList(List l) {//遍历输出表中元素
cout << "List: ";
for (int i = 0;i< l.length; i++) {
cout << l.data[i] << " ";
}
cout << endl;
}
int findList(List l, int n) {//按值查找,返回位置,未找到返回-1
for (int i = 0; i < l.length; i++)
if (l.data[i] == n)
return i + 1;
return -1;
}
int mergeList(List l1, List l2, List* l3) {//有序表合并
int p1 = 0, p2 = 0, p3 = 0;
while (p1 < l1.length && p2 < l2.length) {
if (l1.data[p1 + 1] <= l2.data[p2 + 1]) {
l3->data[p3] = l1.data[p1];
p3++;
p1++;
}
else {
l3->data[p3] = l2.data[p2];
p3++;
p2++;
}
}
while (p1 < l1.length) {
l3->data[p3] = l1.data[p1];
p3++;
p1++;
}
while (p2 < l1.length) {
l3->data[p3] = l2.data[p2];
p3++;
p2++;
}
l3->length = l1.length + l2.length;
return 0;
}
int main() {
List l1;
initList(&l1);
for (int i = 1; i < 6; i++) {
insertList(&l1, i);
}
insertList(&l1, 4, 10);
coutList(l1);
delList(&l1, 5);
cout << "del pos 5" << endl;
coutList(l1);
cout << "pos of 4: " << findList(l1, 4) << endl;
initList(&l1);
for (int i = 1; i < 6; i++) {
insertList(&l1, i*3);
}
List l2;
initList(&l2);
for (int i = 1; i < 3; i++) {
insertList(&l2, i + 10);
}
List l3;
initList(&l3);
mergeList(l1, l2, &l3);
coutList(l1);
coutList(l2);
coutList(l3);
return 0;
}