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文件夹后的单链表项目。

 

posted @ 2022-10-15 21:36  Luli&  阅读(89)  评论(0)    收藏  举报