数据结构用c++实现的数组线性表
基本操作:插入、删除函数以及在main函数里的初始化
以及
顺序合并:尾插法实现(假定原表数据已经有序,不打乱原有顺序)
代码片段:
#include <iostream>
using namespace std;
#define maxlength 50
typedef int Elementtype;
struct LIST {
Elementtype elements[maxlength];
int last = 0;
};
typedef struct {
Elementtype *elements;
int smaxlength = 100, last;
} SLIST;
typedef int position;
//定义顺序表的结束
position End(LIST L) {
return (L.last + 1);
}
//把x插入顺序表L的p处
void Insert(Elementtype x, position p, LIST &L) {
position q;
if (L.last >= maxlength - 1)
cout << "List is full!" << endl;
else if ((p > L.last + 1) || (p < 1))
cout << "position doesn't exist!" << endl;
else {
for (q = L.last; q >= p; q--) {
L.elements[q + 1] = L.elements[q];
}
L.last = L.last + 1;
L.elements[p] = x;
}
}//Insert
void Delete(position p, LIST L) {
position q;
if ((p > L.last) || (p < 1))
cout << "position does not exist!" << endl;
else {
L.last = L.last - 1;
for (q = p; q <= L.last; q++)
L.elements[q] = L.elements[q + 1];
}
}//Delete
//返回L中x的位置
position Locate(Elementtype x, LIST L) {
position q;
for (q = 1; q <= L.last; q++) {
if (L.elements[q] == x)
return q;
}
return (L.last + 1);
}//Locate
//顺序合并 尾插法
bool Merge(LIST L1, LIST L2, SLIST &L3) {
if (L1.last + L2.last > L3.smaxlength)
return false;
int i = 0, j = 0, k = 0;
while (i < L1.last && j < L2.last ) {
if (L1.elements[i] <= L2.elements[j])
L3.elements[k++] = L1.elements[i++];
else
L3.elements[k++] = L2.elements[j++];
}
while (i < L1.last)
L3.elements[k++] = L1.elements[i++];
while (j < L2.last)
L3.elements[k++] = L2.elements[j++];
L3.last = k ; //该方法思想较重要
return true;
}
int main() {
LIST L1;
LIST L2;
SLIST L3;
L3.elements = new Elementtype[maxlength];
int i, j;
for (i = 0; i < maxlength ; i++) {
L1.elements[i] = i * 2 - 1;
L1.last++;
}
for (j = 0; j < maxlength ; j++) {
L2.elements[j] = j * 2;
L2.last++;
}
cout << L1.last << endl;
cout << L2.last << endl;
Merge(L1, L2, L3);
cout << "LIST1" << endl;
for (i = 0; i < L1.last ; i++)
cout << L1.elements[i] << " ";
cout << "\n" << "LIST2" << endl;
for (i = 0; i < L2.last ; i++)
cout << L2.elements[i] << " ";
cout << "\n" << "LIST3" << endl;
for (i = 0; i < L3.last ; i++)
cout << L3.elements[i] << " ";
return 0;
}
主要参考:《数据结构与算法》(第五版)张岩
《数据结构考研复习》(王道)