上海建设三类人员网站,杭州品牌设计公司,如何自己制作一款手游,淘宝cms建站实验目的与要求
实验目的#xff1a;
线性表的逻辑结构特点和线性表抽象数据类型的描述方法线性表的两类存储结构设计方法以及各自的优缺点掌握线性表的基本知识深入理解、掌握并灵活运用线性表。熟练掌握线性表的存储结构及主要运算的实现掌握栈的定义、栈的逻辑结构特性和…实验目的与要求
实验目的
线性表的逻辑结构特点和线性表抽象数据类型的描述方法线性表的两类存储结构设计方法以及各自的优缺点掌握线性表的基本知识深入理解、掌握并灵活运用线性表。熟练掌握线性表的存储结构及主要运算的实现掌握栈的定义、栈的逻辑结构特性和栈的基本运算。理解栈在表达式求值中的应用。掌握队列的定义、队列的逻辑结构特性和栈的基本运算。理解队列的应用。
实验要求
编程实现如下功能
递增有序顺序表的插入
1、已知顺序表L递增有序将X插入到线性表的适当位置上保证线性表有序。
输入格式:
第1行输入顺序表长度第2行输入递增有序的顺序表第3行输入要插入的数据元素X。
输出格式
对每一组输入在一行中输出插入X后的递增的顺序表。 两个有序链表序列的交集
2、已知两个非降序链表序列S1与S2设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行分别在每行给出由若干个正整数构成的非降序序列用−1表示序列的结尾−1不属于这个序列。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列数字间用空格分开结尾不能有多余空格若新链表为空输出NULL。
简单计算器
3、本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示计算器由两个堆栈组成一个堆栈 S1 存放数字另一个堆栈 S2存放运算符。计算器的最下方有一个等号键每次按下这个键计算器就执行以下操作
从 S1 中弹出两个数字顺序为 n1 和 n2从 S2 中弹出一个运算符 op执行计算 n2 op n1将得到的结果压回 S1。
直到两个堆栈都为空时计算结束最后的结果将显示在屏幕上。
输入格式
输入首先在第一行给出正整数 N1N≤103为 S1 中数字的个数。
第二行给出 N 个绝对值不超过 100 的整数第三行给出 N−1 个运算符 —— 这里仅考虑 、-、*、/ 这四种运算。一行中的数字和符号都以空格分隔。
输出格式
将输入的数字和运算符按给定顺序分别压入堆栈 S1 和 S2将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 109。
如果执行除法时出现分母为零的非法操作则在一行中输出ERROR: X/0其中 X 是当时的分子。然后结束程序。
输入样例 1
540 5 8 3 2/ * -
输出样例 1
2
输入样例 2
52 5 8 4 4* / -
输出样例 2
ERROR: 5/0
银行业务队列简单模拟
4、设某银行有A、B两个业务窗口且处理业务的速度不一样其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时B窗口处理完1个顾客。给定到达银行的顾客序列请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔并且当不同窗口同时处理完2个顾客时A窗口顾客优先输出。
输入格式:
输入为一行正整数其中第1个数字N(≤1000)为顾客总数后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务为偶数的顾客则去B窗口。数字间以空格分隔。
输出格式:
按业务处理完成的顺序输出顾客的编号。数字间以空格分隔但最后一个编号后不能有多余的空格。
输入样例:
8 2 1 3 9 4 11 13 15
输出样例:
1 3 2 9 11 4 13 15
实验原理与内容
实验原理
顺序表的插入操作在于找准位置循环移动元素注意移动下标的边界问题
以下是给定位置插入本题中思考参数还需要指定位置吗
bool Insert( List L, ElementType X, int i )
{ Position j;if ( L-Last MAXSIZE-1) {/* 表空间已满不能插入 */printf(表满); return false; } if ( i1 || iL-Last2 ) { /* 检查插入位序的合法性是否在1~n1。n为当前元素个数即Last1 */printf(位序不合法);return false; } for( jL-Last; ji-1; j-- ) /*Last指向序列最后元素 */L-Data[j1] L-Data[j]; /* 将位序i及以后的元素顺序向后移动 */L-Data[i-1] X; /* 新元素插入第i位序其数组下标为i-1 */L-Last; /* Last仍指向最后元素 */return true;
}链表不要求逻辑上相邻的两个数据元素物理上也相邻它是通过“链”建立起数据元素之间的逻辑关系。因此对线性表的插入、删除不需要移动数据元素只需要修改“链”。
堆栈
“堆栈Stack”可以认为是具有一定操作约束的线性表插入和删除操作都作用在一个称为栈顶(Top)的端点位置。主要特点是“后进先出”Last In First Out。
队列
队列是一种限制在两端进行插入和删除的线性表。
【分析提示】
首先需要针对A和B业务设计两个循环队列分别处理两类业务请求然后根据输入序列整数的奇偶性将各个整数分配到这两个队列中。另外需要设计针对两个队列处理过程的流程这是一个循环。在循环中先从A队列中输出两个元素然后再从B队列输出一个元素。当发现某一队列为空时输出另一个队列的所有元素。
【实现要点】
采用统一的循环队列函数处理两个队列的操作注意对队列满、空情况的判断。
实验内容:
建立顺序表并在顺序表上实现基本运算操作已知顺序表L递增有序将X插入到线性表的适当位置上保证线性表有序
3 建立链表并在链表上实现基本运算操作
4 已知两个非降序链表序列S1与S2设计函数构造出S1与S2的交集新链表S3
5. 建立顺序栈并在栈上实现基本运算操作
6. 实现栈在简易计算器的应用
7建立循环队列并在队列上实现基本运算操作
8实现银行业务队列的简单模拟
实验过程与结果
每道题目都要写出以下三个步骤
递增有序顺序表的插入
#include stdio.h
int main()
{int dz[200];int a,b,i,j;scanf(%d,a);for(i0;ia;i)scanf(%d,dz[i]);scanf(%d,b);dz[a]b;for(ia;i0;i--) if(dz[i]dz[i-1]){jdz[i];dz[i]dz[i-1];dz[i-1]j; } for(i0;ia1;i)printf(%d,,dz[i]); return 0;
}两个有序链表序列的交集
#include stdio.h
#include stdlib.h
struct Node
{int data;struct Node *next;
};
struct Node *build();
struct Node *operate(struct Node *a,struct Node *b);
int main()
{struct Node *a,*b,*c;abuild();bbuild();coperate(a,b);if(!c)printf(NULL\n);while(c){if(c-nextNULL)printf(%d,c-data);elseprintf(%d ,c-data);cc-next;}
}
struct Node *build()
{int a;struct Node *headNULL,*strNULL;scanf(%d,a);while(a!-1){struct Node *p(struct Node*)malloc(sizeof(struct Node));p-dataa;p-nextNULL;if(headNULL)headp;elsestr-nextp;strp; scanf(%d,a);}return head;
}
struct Node *operate(struct Node *a,struct Node *b)
{struct Node *headNULL,*strNULL;while(ab){if((a-data)(b-data))aa-next;else if((a-data)(b-data))bb-next;else if((a-data)(b-data)){if(headNULL)heada;elsestr-nexta;stra; aa-next;bb-next;str-nextNULL;//放在这里很重要要先将a进至下一节点防止直接将链表a中断}}return head;
}
简单计算器
#includestdio.h
int digit(int a,int b,char c)//计算操作
{if(c)return ab;if(c-)return a-b;if(c*)return a*b;if(c/b0)return -199;//如果出错就返回199继续后续的ERROR打印if(c/)return a/b;else return 0;
}
int main()
{int n;scanf(%d,n);int a[n];char b[n-1];for(int i0;in;i)scanf(%d,a[i]);getchar();//要用getchar吸收空格和回车一开始搞错了找了很久的错误。for(int i0;in-1;i){scanf(%c,b[i]);getchar(); }int sum0;int p n-2;//p是字符数组的下标因为有n-1个元素所以末尾元素是n-2for(int in-1;i0;i--){ int tem a[i-1];a[i-1] digit(a[i-1],a[i],b[p]);//计算后两位然后结果给到倒数第二位p--;if(a[i-1]-199)//哎等于-199说明错误啦所以输出然后直接返回。tem是为了存i-1的数值//不然i-1就是-199啦就会错的一塌糊涂。{printf(ERROR: %d/%d,tem,a[i]);return 0;}}printf(%d,a[0]);//全部计算完之后就只剩下a[0]啦
}银行业务队列简单模拟
#includeiostream
#includequeue
using namespace std;
int N;
queueintA;
queueintB;
void Input() {cin N;int M;for (int i 1; i N; i) {cin M;if (M % 2 0) {B.push(M);}else {A.push(M);}}
}
void Printf() {int flag 0;while (A.empty() ! 1 B.empty() ! 1) {//当他们都不为空if (flag 0) {cout A.front();flag;}else {cout A.front();}A.pop();if (A.empty() ! 1) {cout A.front();A.pop();}cout B.front();B.pop();}while (A.empty() 1 B.empty() ! 1) {if (flag 0) {cout B.front();flag;}else {cout B.front();}B.pop();}while (A.empty() ! 1 B.empty() 1) {if (flag 0) {cout A.front();flag;}else {cout A.front();}A.pop();}
}int main() {Input();Printf();}