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

数据结构的基本操作以及两个顺序表的合并数据结构—顺序表的基本操作还有两个顺序表的合并代码演示:test.cc#include”test.h”#includeiostreamusingnamespacestd;intinit_list(psqlistL)

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

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

今天的文章数据结构的基本操作以及两个顺序表的合并分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65368.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注