赞
踩
设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
解法一:边判断边移动(代码更简单)
- void Insert_list(int x, Seqlist &va) { //插入x,保持顺表递增有序
- if (va.list_len == va.list_size) {
- printf("顺序表已经满了!\n");
- return ;
- }
- int i;
- for (i = va.list_len ; i > 0 && x < va.a[i - 1]; i--) {
- va.a[i] = va.a[i - 1];
- }
- va.a[i] = x;
- va.list_len++;
- return ;
- }
解法二:先找到需要移动的位置,再移动。(注意x插入头部、尾部的情况)
- void Insert_list(int x, Seqlist &va) { //插入x,保持顺表递增有序
- if (va.list_len == va.list_size) {
- printf("顺序表已经满了!\n");
- return ;
- }
- int res = va.list_len;//考虑插入尾部
- for (int i = va.list_len - 1; i >= 0; i--) {
- if (x >= va.a[i]) {
- res = i + 1;
- break;
- }
- if (i == 0) {//考虑插入首部
- res = 0;
- break;
- }
- }
- for (int i = va.list_len - 1; i >= res; i--) {
- va.a[i + 1] = va.a[i];
- }
- va.a[res] = x;
- va.list_len++;
- return ;
- }
- #include <stdio.h>
- #include <stdlib.h>//动态数组
- #define len 10
- #define size 20
-
- typedef struct {
- int *a;//顺序表起始地址
- int list_len;//实际表长
- int list_size;//总长度
- } Seqlist;
-
- void Init_list(Seqlist &va) { //初始化顺序表
- va.a = (int *)malloc(len * sizeof(int));
- if (!va.a) {
- printf("内存分配失败!\n");
- exit(1);//程序将立即退出,不再继续执行后面的语句
- }
- va.list_len = len;
- va.list_size = size;
- printf("请输入长度为10的有序数列:\n");
- for (int i = 0; i < va.list_len; i++) {
- scanf("%d", &(va.a[i]));
- }
- return ;
- }
-
- //void Insert_list(int x, Seqlist &va) { //插入x,保持顺表递增有序
- // if (va.list_len == va.list_size) {
- // printf("顺序表已经满了!\n");
- // return ;
- // }
- // int res = va.list_len;//考虑插入尾部
- // for (int i = va.list_len - 1; i >= 0; i--) {
- // if (x >= va.a[i]) {
- // res = i + 1;
- // break;
- // }
- // if (i == 0) {//考虑插入首部
- // res = 0;
- // break;
- // }
- // }
- // for (int i = va.list_len - 1; i >= res; i--) {
- // va.a[i + 1] = va.a[i];
- // }
- // va.a[res] = x;
- // va.list_len++;
- // return ;
- //}
-
- void Insert_list(int x, Seqlist &va) { //插入x,保持顺表递增有序
- if (va.list_len == va.list_size) {
- printf("顺序表已经满了!\n");
- return ;
- }
- int i;
- for (i = va.list_len ; i > 0 && x < va.a[i - 1]; i--) {
- va.a[i] = va.a[i - 1];
- }
- va.a[i] = x;
- va.list_len++;
- return ;
- }
-
- int main() {
- Seqlist va;
- Init_list(va);
- int x;
- printf("请输入插入元素:\n");
- scanf("%d", &x);
- Insert_list(x, va);
- printf("最终结果:\n");
- for (int i = 0; i < va.list_len; i++) {
- printf("%d\t", va.a[i]);
- }
- free(va.a);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。