homework
线性结构:
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 100;
typedef int Elemtype;
typedef struct {
Elemtype *data;
int max_Size;
int top;
} List;
void InitList(List &S); //初始化
void menu(); //主界面
void insert_End(List &S); //在末尾插入数据
void insert_All(List &S); //在指定位置前插入新成员
void delet_All(List &S); //删除指定位置的成员
void print_i(List &S); //输出指定位置处成员信息
void print_ALL(List &S); //输出所有成员信息
void get_count(List &S); //输出表中成员个数
void add_Link(List &A, List &B, List&C, int a, int b); //7.合并两个有序顺序表
int main() {
List a;
InitList(a);
int x; //选择器
while (1) {
menu();
cin >> x;
switch (x) {
case 1: //在表尾添加新成员
insert_End(a);
break;
case 2: //在指定位置前插入新成员
insert_All(a);
break;
case 3://删除指定位置的成员
delet_All(a);
break;
case 4: // 输出指定位置处成员信息
print_i(a);
break;
case 5: //输出所有成员信息
print_ALL(a);
break;
case 6:// 输出表中成员个数
get_count(a);
break;
case 7: //add_Link(LinkList &A, LinkList &B)
puts("该函数在此功能中没有实际应用,如需使用,请查看代码");
break;
default:
puts("感谢使用,再见!");
exit(0);
}
}
}
void InitList(List &S) {
S.data = new Elemtype[MaxSize];
S.max_Size = 0;
S.top = 0;
}
void menu() {
puts("请输入数据,选择你的需求:");
puts("1.在表尾添加新成员");
puts("2.在指定位置前插入新成员");
puts("3.删除指定位置的成员");
puts("4.输出指定位置处成员信息");
puts("5.输出所有成员信息");
puts("6.输出表中成员个数");
puts("7.合并两个有序顺序表");
puts("其他数据退出程序");
}
void insert_End(List &S) {
puts("input data:");
Elemtype new_X;
cin >> new_X;
if (S.top == MaxSize) {
puts("数据已满,插入错误!");
return;
}
S.data[S.top++] = new_X;
}
void insert_All(List &S) {
int i;
Elemtype new_X;
puts("input i and data:");
cin >> i >> new_X;
if (S.top == MaxSize) {
puts("数据已满,插入错误!");
return;
}
if (i > S.top + 1 || i < 0) {
puts("插入不合法,false");
return;
}
for (int j = S.top; j >= i; j--) {
S.data[j] = S.data[j - 1];
}
S.data[i - 1] = new_X;
S.top++;
}
void delet_All(List &S) {
int i;
puts("input i:");
cin >> i;
if (i >= S.top || i <= 0) {
puts("删除不合法");
return;
}
for (i = i - 1; i < S.top; i++) S.data[i] = S.data[i + 1];
S.top--;
}
void print_i(List &S) {
int i;
puts("input i:");
cin >> i;
if (i > S.top || i <= 0) { //空的情况会执行
puts("取数不合法");
return;
}
cout << S.data[i - 1] << endl;
}
void print_ALL(List &S) {
if (!S.top) {
puts("没有数据可以输出");
return;
}
for (int i = 0; i < S.top; i++) cout << S.data[i] << ' ';
puts("");
}
void get_count(List &S) {
cout << "成员个数:" << S.top << endl;
}
void add_Link(List &A, List &B, List &C, int a, int b) {
int cnt = 0;
int l = 1, r = 1;
while(l <= a && r <= b) {
if(A.data[l] > B.data[r]) C.data[++cnt] = B.data[r++];
else C.data[++cnt] = A.data[l++];
}
while(l <= a) C.data[++cnt] = A.data[l++];
while(r <= b) C.data[++cnt] = B.data[r++];
}
链式结构:
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 100;
typedef int Elemtype;
typedef struct List {
Elemtype data;
List *next;
} List, *LinkList;
void InitList(LinkList &P); //初始化
void menu(); //主界面
void insert_End(LinkList &P); //在末尾插入数据
void insert_All(LinkList &P); //在指定位置前插入新成员
void delet_All(LinkList &P); //删除指定位置的成员
void print_i(LinkList &P); //输出指定位置处成员信息
void print_ALL(LinkList &P); //输出所有成员信息
void get_count(LinkList &P); //输出表中成员个数
void add_Link(LinkList &A, LinkList &B); //7.合并两个有序顺序表
int main() {
LinkList a;
InitList(a);
int x; //选择器
while (1) {
menu();
cin >> x;
switch (x) {
case 1: //在表尾添加新成员
insert_End(a);
break;
case 2: //在指定位置前插入新成员
insert_All(a);
break;
case 3://删除指定位置的成员
delet_All(a);
break;
case 4: // 输出指定位置处成员信息
print_i(a);
break;
case 5: //输出所有成员信息
print_ALL(a);
break;
case 6:// 输出表中成员个数
get_count(a);
break;
case 7: //add_Link(LinkList &A, LinkList &B)
puts("该函数在此功能中没有实际应用,如需使用,请查看代码");
break;
default:
puts("感谢使用,再见!");
exit(0);
}
}
}
void InitList(LinkList &P) {
P = new List;
P->next = NULL;
}
void menu() {
puts("请输入数据,选择你的需求:");
puts("1.在表尾添加新成员");
puts("2.在指定位置前插入新成员");
puts("3.删除指定位置的成员");
puts("4.输出指定位置处成员信息");
puts("5.输出所有成员信息");
puts("6.输出表中成员个数");
puts("7.合并两个有序顺序表");
puts("其他数据退出程序");
}
void insert_End(LinkList &P) {
puts("input data:");
LinkList new_X;
new_X = new List;
Elemtype x;
cin >> x;
new_X->data = x;
LinkList p = P;
while (p->next != NULL) p = p->next;
p->next = new_X;
new_X->next = NULL;
}
void insert_All(LinkList &P) {
int i;
LinkList new_X;
new_X = new List;
puts("input i and data:");
cin >> i >> new_X->data;
int t = 1;
LinkList p;
p = P;
while (t < i && p != NULL) {
p = p->next;
t++;
}
if (t < 0 || p == NULL) {
puts("插入错误");
return;
}
new_X->next = p->next;
p->next = new_X;
}
void delet_All(LinkList &P) {
int i;
puts("input i:");
cin >> i;
int t = 1;
LinkList p = P;
while (t < i && p != NULL) {
t++;
p = p->next;
}
if (i < 0 || p == NULL) {
puts("删除错误");
return;
}
p->next = p->next->next;
}
void print_i(LinkList &P) {
int i;
puts("input i:");
cin >> i;
int t = 1;
LinkList p = P->next;
while (t < i && p != NULL) {
t++;
p = p->next;
}
if (i < 0 || p == NULL) {
puts("查询错误");
return;
}
cout << p->data << endl;
}
void print_ALL(LinkList &P) {
if (P->next == NULL) {
puts("没有数据可以输出");
return;
}
LinkList p = P->next;
while (p != NULL) {
cout << p->data << ' ';
p = p->next;
}
puts("");
return;
}
void get_count(LinkList &P) {
LinkList p = P->next;
int t = 0;
while (p != NULL) {
t++;
p = p->next;
}
cout << "数据总量为:" << t << endl;
}
void add_Link(LinkList &A, LinkList &B) {
LinkList pa, pb;
pa = A->next, pb = B->next;
while (pa != NULL && pb != NULL) {
if (pa->data >= pb->data) pa = pa->next;
else {
LinkList t;
t = pb;
pb = pb->next;
t->next = pa->next;
pa->next = t;
}
}
if (pb != NULL) {
pa = A;
while (pa->next != NULL) pa = pa->next;
pa->next = pb;
}
}
WORD
实验项目一:线性表的基本操作
1、实验学习目标
(1)掌握顺序表和单链表的类型定义方法和初始化方法;
(2)掌握顺序表和单链表的基本操作。
2、实验设备
PC机,VC++6.0。
3、实验内容与步骤
(1)建立第一个项目,编程实现顺序表的基本操作,要求运行时先出现类似如下的菜单项,程序会根据输入的数字自动调用相关的功能函数:
" 请输入相关选项:"
" 1.在表尾添加新成员"
" 2.在指定位置前插入新成员"
" 3.删除指定位置的成员"
" 4.输出指定位置处成员信息"
" 5.输出所有成员信息"
" 6.输出表中成员个数"
" 7.合并两个有序顺序表"
(此处粘贴相关代码和运行结果截图)A
All:线性存储
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 100;
typedef int Elemtype;
typedef struct {
Elemtype *data;
int max_Size;
int top;
} List;
void InitList(List &S); //初始化
void menu(); //主界面
void insert_End(List &S); //在末尾插入数据
void insert_All(List &S); //在指定位置前插入新成员
void delet_All(List &S); //删除指定位置的成员
void print_i(List &S); //输出指定位置处成员信息
void print_ALL(List &S); //输出所有成员信息
void get_count(List &S); //输出表中成员个数
void add_Link(List &A, List &B, List&C, int a, int b); //7.合并两个有序顺序表
int main() {
List a;
InitList(a);
int x; //选择器
while (1) {
menu();
cin >> x;
switch (x) {
case 1: //在表尾添加新成员
insert_End(a);
break;
case 2: //在指定位置前插入新成员
insert_All(a);
break;
case 3://删除指定位置的成员
delet_All(a);
break;
case 4: // 输出指定位置处成员信息
print_i(a);
break;
case 5: //输出所有成员信息
print_ALL(a);
break;
case 6:// 输出表中成员个数
get_count(a);
break;
case 7: //add_Link(LinkList &A, LinkList &B)
puts("该函数在此功能中没有实际应用,如需使用,请查看代码");
break;
default:
puts("感谢使用,再见!");
exit(0);
}
}
}
void InitList(List &S) {
S.data = new Elemtype[MaxSize];
S.max_Size = 0;
S.top = 0;
}
void menu() {
puts("请输入数据,选择你的需求:");
puts("1.在表尾添加新成员");
puts("2.在指定位置前插入新成员");
puts("3.删除指定位置的成员");
puts("4.输出指定位置处成员信息");
puts("5.输出所有成员信息");
puts("6.输出表中成员个数");
puts("7.合并两个有序顺序表");
puts("其他数据退出程序");
}
void insert_End(List &S) {
puts("input data:");
Elemtype new_X;
cin >> new_X;
if (S.top == MaxSize) {
puts("数据已满,插入错误!");
return;
}
S.data[S.top++] = new_X;
}
void insert_All(List &S) {
int i;
Elemtype new_X;
puts("input i and data:");
cin >> i >> new_X;
if (S.top == MaxSize) {
puts("数据已满,插入错误!");
return;
}
if (i > S.top + 1 || i < 0) {
puts("插入不合法,false");
return;
}
for (int j = S.top; j >= i; j--) {
S.data[j] = S.data[j - 1];
}
S.data[i - 1] = new_X;
S.top++;
}
void delet_All(List &S) {
int i;
puts("input i:");
cin >> i;
if (i >= S.top || i <= 0) {
puts("删除不合法");
return;
}
for (i = i - 1; i < S.top; i++) S.data[i] = S.data[i + 1];
S.top--;
}
void print_i(List &S) {
int i;
puts("input i:");
cin >> i;
if (i > S.top || i <= 0) { //空的情况会执行
puts("取数不合法");
return;
}
cout << S.data[i - 1] << endl;
}
void print_ALL(List &S) {
if (!S.top) {
puts("没有数据可以输出");
return;
}
for (int i = 0; i < S.top; i++) cout << S.data[i] << ' ';
puts("");
}
void get_count(List &S) {
cout << "成员个数:" << S.top << endl;
}
void add_Link(List &A, List &B, List &C, int a, int b) {
int cnt = 0;
int l = 1, r = 1;
while(l <= a && r <= b) {
if(A.data[l] > B.data[r]) C.data[++cnt] = B.data[r++];
else C.data[++cnt] = A.data[l++];
}
while(l <= a) C.data[++cnt] = A.data[l++];
while(r <= b) C.data[++cnt] = B.data[r++];
}
(2)建立第二个项目,编程实现单链表的基本操作,菜单类似顺序
模块代码
。
运行图
代码全部
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 100;
typedef int Elemtype;
typedef struct List {
Elemtype data;
List *next;
} List, *LinkList;
void InitList(LinkList &P); //初始化
void menu(); //主界面
void insert_End(LinkList &P); //在末尾插入数据
void insert_All(LinkList &P); //在指定位置前插入新成员
void delet_All(LinkList &P); //删除指定位置的成员
void print_i(LinkList &P); //输出指定位置处成员信息
void print_ALL(LinkList &P); //输出所有成员信息
void get_count(LinkList &P); //输出表中成员个数
void add_Link(LinkList &A, LinkList &B); //7.合并两个有序顺序表
int main() {
LinkList a;
InitList(a);
int x; //选择器
while (1) {
menu();
cin >> x;
switch (x) {
case 1: //在表尾添加新成员
insert_End(a);
break;
case 2: //在指定位置前插入新成员
insert_All(a);
break;
case 3://删除指定位置的成员
delet_All(a);
break;
case 4: // 输出指定位置处成员信息
print_i(a);
break;
case 5: //输出所有成员信息
print_ALL(a);
break;
case 6:// 输出表中成员个数
get_count(a);
break;
case 7: //add_Link(LinkList &A, LinkList &B)
puts("该函数在此功能中没有实际应用,如需使用,请查看代码");
break;
default:
puts("感谢使用,再见!");
exit(0);
}
}
}
void InitList(LinkList &P) {
P = new List;
P->next = NULL;
}
void menu() {
puts("请输入数据,选择你的需求:");
puts("1.在表尾添加新成员");
puts("2.在指定位置前插入新成员");
puts("3.删除指定位置的成员");
puts("4.输出指定位置处成员信息");
puts("5.输出所有成员信息");
puts("6.输出表中成员个数");
puts("7.合并两个有序顺序表");
puts("其他数据退出程序");
}
void insert_End(LinkList &P) {
puts("input data:");
LinkList new_X;
new_X = new List;
Elemtype x;
cin >> x;
new_X->data = x;
LinkList p = P;
while (p->next != NULL) p = p->next;
p->next = new_X;
new_X->next = NULL;
}
void insert_All(LinkList &P) {
int i;
LinkList new_X;
new_X = new List;
puts("input i and data:");
cin >> i >> new_X->data;
int t = 1;
LinkList p;
p = P;
while (t < i && p != NULL) {
p = p->next;
t++;
}
if (t < 0 || p == NULL) {
puts("插入错误");
return;
}
new_X->next = p->next;
p->next = new_X;
}
void delet_All(LinkList &P) {
int i;
puts("input i:");
cin >> i;
int t = 1;
LinkList p = P;
while (t < i && p != NULL) {
t++;
p = p->next;
}
if (i < 0 || p == NULL) {
puts("删除错误");
return;
}
p->next = p->next->next;
}
void print_i(LinkList &P) {
int i;
puts("input i:");
cin >> i;
int t = 1;
LinkList p = P->next;
while (t < i && p != NULL) {
t++;
p = p->next;
}
if (i < 0 || p == NULL) {
puts("查询错误");
return;
}
cout << p->data << endl;
}
void print_ALL(LinkList &P) {
if (P->next == NULL) {
puts("没有数据可以输出");
return;
}
LinkList p = P->next;
while (p != NULL) {
cout << p->data << ' ';
p = p->next;
}
puts("");
return;
}
void get_count(LinkList &P) {
LinkList p = P->next;
int t = 0;
while (p != NULL) {
t++;
p = p->next;
}
cout << "数据总量为:" << t << endl;
}
void add_Link(LinkList &A, LinkList &B) {
LinkList pa, pb;
pa = A->next, pb = B->next;
while (pa != NULL && pb != NULL) {
if (pa->data >= pb->data) pa = pa->next;
else {
LinkList t;
t = pb;
pb = pb->next;
t->next = pa->next;
pa->next = t;
}
}
if (pb != NULL) {
pa = A;
while (pa->next != NULL) pa = pa->next;
pa->next = pb;
}
}
此处粘贴相关代码和运行结果截图)
4、实验要求与注意事项
(1)学生上课前完成问题分析、算法设计,基本完成程序设计;实验时每位学生使用1台微机,独立调试;记录程序的输入数据、运行结果和源程序;提交程序源代码。
(2)提交时交一个压缩包,包含三个内容:
a.粘贴代码后的本文档,以学号姓名命名;
b.删除Debug文件夹后的顺序表项目;
c.删除Debug文件夹后的单链表项目。

浙公网安备 33010602011771号