数据结构的基本操作以及两个顺序表的合并

数据结构—顺序表的基本操作
还有两个顺序表的合并

代码演示:
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);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值