400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

23王道数据结构代码题全解(一)-创新互联

计划更新23王道数据结构所有课后代码习题的实现,虽然考试写的一般都是伪代码,但是强迫症的我还是全部实现了一遍,仓库在这里

专注于为中小企业提供成都网站制作、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业陇南免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

代码全部是用 C++ 写的,都可以编译运行,包含暴力解和最优解。

持续更新,目前更新进度:

  • 线性表 7/14

仅供参考! 会包含一些考试不让写的语法,可能也会有一些错误。

顺序表结构体

考试直接使用,一般不会让你写出结构体

#define ElemType int
#define MaxSize 50

typedef struct {ElemType data[MaxSize];
  int length;
}SqList;
2.2.3, 1

image-20220407205615856.png

int del_min(SqList &list) {if (list.length == 0) {cout<< "Error!"<< endl;
    return -1;
  }

  // 1.假设0号元素最小
  int min = list.data[0]; 
  int pos = 0;

  // 2.循环找出最小元素并记录位置, 从1开始
  for (int i = 1; i< list.length; i++) {if (list.data[i]< min) {  min = list.data[i];
      pos = i;
    }
  }

  // 3.删除最小元素并用最后一个元素替换
  list.data[pos] = list.data[list.length - 1];
  list.length--; 

  return min;
}
2.2.3, 2

image-20220407205709565.png

void reverse(SqList &list) {for (int i = 0; i< list.length / 2; i++) {// 不让用swap()的话,可以定义一个辅助变量来交换
    swap(list.data[i], list.data[list.length - 1 - i]);
  }
}
2.2.3, 3

image-20220407232103579.png

void del_x(SqList &list, int x) {int k = 0;
  for (int i = 0 ; i< list.length ; i++) {// 1.把所有要保存的值都放在前面
    if (list.data[i] != x) {  list.data[k++] = list.data[i];
    }
  }
  // 2.直接扔掉后面的元素
  list.length = k;
}
// 太麻烦了,不如上一个方法
void del_x_2(SqList &list, int x) {int i = -1, j = list.length, k = 0;
  while (i< j) {while (list.data[++i] != x); 
    while (list.data[--j] == x) k++;
    if (i< j) {  swap(list.data[i], list.data[j]);
      k++;
    }
  }
  list.length -= k;
}
2.2.3, 4

image.png

void del_st(SqList &list, int s, int t) {if (s >= t || list.length == 0) {cout<< "ERROR!"<< endl;
    return;
  }

  // 1.要保存的值都放在前面
  int k = 0; 
  for (int i = 0; i< list.length; i++) {if (list.data[i]< s || list.data[i] >t) {  list.data[k++] = list.data[i];
    }
  }
  
  // 2.直接扔掉后面的值
  list.length = k;
}
void del_st2(SqList &list, int s, int t) {if (s >= t || list.length == 0) {cout<< "ERROR!"<< endl;
    return; 
  }

  // 1.找到大于等于s的值
  int i = -1;
  while (list.data[++i]< s);

  // 2.如果全部元素均小于s
  if (i >= list.length) {cout<< "ERROR!"<< endl;
    return; 
  }

  // 3.找到大于t的元素
  int j = i-1;
  while (list.data[++j]<= t);

  // 4.前移,直接占住被删元素的位置
  while(j< list.length) {list.data[i++] = list.data[j++];
  }
  list.length = i;
}
2.2.3, 5

image.png

void del_st(SqList &list, int s, int t) {if (s >= t || list.length == 0) {cout<< "ERROR!"<< endl;
    return;
  }

  // 1.要保存的值都放在前面
  int k = 0; 
  for (int i = 0; i< list.length; i++) {if (list.data[i]< s || list.data[i] >t) {  list.data[k++] = list.data[i];
    }
  }
  
  // 2.直接扔掉后面的值
  list.length = k;
}
2.2.3, 6

image.png

void del_same(SqList &list) {if (list.length == 0) return;
  
  // 1.新开一个数组
  SqList copied = list;
  copied.data[0] = list.data[0];

  // 2.把不同元素存入
  int k = 0;
  for (int i = 1; i< list.length; i++) {if (list.data[k] != copied.data[i]) {  copied.data[++k] = list.data[i];
    }
  }

  // 3.新换旧
  copied.length = k + 1;
  list = copied;
}
void del_same2(SqList &list) {if (list.length == 0) return;

  int k = 0;
  for (int i = 1; i< list.length; i++) {if (list.data[k] != list.data[i]) {  list.data[++k] = list.data[i];
    }
  }
  list.length = k + 1;
}
2.2.4, 7

image.png

SqList merge(SqList A, SqList B) {SqList C;
  if (A.length + B.length >MaxSize) {cout<< "ERROR!"<< endl;
    return C;
  }

  int i = 0, j = 0, k = 0;
  // 1.两两比较,小的存入结果表
  while (i< A.length && j< B.length) {if (A.data[i]<= B.data[j])
      C.data[k++] = A.data[i++];
    else
      C.data[k++] = B.data[j++];
  }

  // 2.剩下的全部加入结果表,两个循环只会有一个运行
  while (i< A.length) 
    C.data[k++] = A.data[i++];
  while (i< B.length) 
    C.data[k++] = B.data[j++];

  // 3.返回结果表
  C.length = k;
  return C;
}
void merge_sort(int l, int r) {if (l >= r) return;

  int mid = (l+r) >>1;
  merge_sort(l, mid);
  merge_sort(mid+1, r);		

  int k = 0, i = l, j = mid+1;
  while (i<= mid && j<= r) {if (q[i]<= q[j]) 
      tmp[k++] = q[i++];
    else 
      tmp[k++] = q[j++];
  }
  
  while (i<= mid) 
    tmp[k++] = q[i++];
  while (j<= r) 
    tmp[k++] = q[j++];

  for (i = l, j = 0; i<= r; i++, j++) 
    q[i++] = tmp[j++];
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:23王道数据结构代码题全解(一)-创新互联
网站链接:http://mzwzsj.com/article/eocgi.html

其他资讯

让你的专属顾问为你服务