数据结构—顺序表的基本操作
还有两个顺序表的合并
代码演示:
test.cc
#include "test.h"
#include <iostream>
using namespace std;
//初始化顺序表
int init_list(psqlist L) {
if (L == NULL) {
return 0;
}
L->len = 0;
return 0;
}
//求表的长度
int len_list(psqlist L) {
if (L == NULL) {
return 0;
}
return L->len;
}
//查找顺序表中第i个元素,并返回
int getdata_list(psqlist L, int i) {
if (L->len < 1) {
return 0;
}
return L->data[i - 1];
}
//第i个位置插入num值到顺序表
int insert_list(psqlist L, int i, int num) {
if (L->len > LIST_SIZE) {
printf("顺序表已满,不能插入\n");
return 0;
} else if (i < 1 || L->len > len_list(L) + 1) {
printf("插入位置不合法\n");
return 0;
} else {
for (int k = i; k <= L->len; k++) {
L->data[k + 1] = L->data[k];
}
L->data[i - 1] = num;
L->len++;
}
return 0;
}
//删除第i个位置元素
int delect_list(psqlist L, int i) {
if (L->len < 1) {
printf("顺序表为空\n");
return 0;
}
for (int k = i; k <= L->len; k++) {
L->data[k - 1] = L->data[k];
}
L->len--;
return 0;
}
//打印顺序表
void print_list(psqlist L) {
if (L->len == 0) {
printf("表为空\n");
}
for (int i = 0; i < L->len; i++) {
printf("%d", L->data[i]);
}
printf("\n");
}
//返回num值对应元素的下标
int location_list(psqlist L, int num) {
if (L->len < 0) {
printf("表为空\n");
return 0;
}
for (int i = 0; i < L->len; i++) {
if (L->data[i] == num) {
// i对应num的下标,在顺序表中的数组下标应为i+1
return i + 1;
}
}
return 0;
}
//合并两个顺序表
void merge(psqlist L1, psqlist L2, psqlist L3) {
int i = 0, j = 0, k = 0;
while (i < L1->len && j < L2->len) {
if (L1->data[i] <= L2->data[j]) {
L3->data[k] = L1->data[i];
k++;
i++;
} else {
L3->data[k] = L2->data[j];
k++;
j++;
}
}
// L1比L2长,剩下的直接赋给L3
while (i < L1->len) {
L3->data[k] = L1->data[i];
i++;
k++;
}
while (j < L2->len) {
L3->data[k] = L2->data[j];
j++;
k++;
}
L3->len = L1->len + L2->len;
}
int main() {
sqlist L1, L2, L3;
init_list(&L1);
init_list(&L2);
init_list(&L3);
for (int i = 1; i <= 10; i++) {
insert_list(&L1, i, i);
insert_list(&L2, i, i + 1);
}
print_list(&L1);
print_list(&L2);
printf("%d\n", location_list(&L1, 10));
delect_list(&L1, 2);
print_list(&L1);
printf("%d\n", location_list(&L1, 10));
print_list(&L3);
merge(&L1, &L2, &L3);
print_list(&L3);
return 0;
}
test.h
#define LIST_SIZE 100
typedef struct {
int data[LIST_SIZE];
int len;
} sqlist, *psqlist;
class p_list {
public:
int init_list(psqlist L);
int len_list(psqlist L);
int getdata_list(psqlist L, int i);
int insert_list(psqlist L, int i, int num);
int delect_list(psqlist L, int i);
void print_list(psqlist L);
int location_list(psqlist L, int num);
};