已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。
输入格式: 第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。
输入样式:
5
1 3 5 7 9
6
输出格式: 对每一组输入,在一行中输出插入X后的递增的顺序表。
输出样式:
1,3,5,6,7,9,
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFOLW -2
#define MAXSIZE 100
typedef int Status; //定义Status函数
typedef int SqElemType;
typedef struct List //顺序表结构体
{
SqElemType *num;
int length; //长度
}SqList;
Status InitSqList(SqList &L){ //创建空顺序表
L.num = new SqElemType[MAXSIZE];
if(!L.num) exit(OVERFOLW); //分配失败
L.length = 0; //长度初始值为0
return OK;
}
int LocateElem(SqList L,SqElemType e){ //查找(要插入的位置i
int i;
for (i = 0; i < L.length; i++)
{
if (L.num[i] > e) //从第一个开始比较e的值,找到位置i
{
break;
}
}
return i;
}
Status InsertSqList(SqList &L,SqElemType e){ //插入
int i,j;
j = LocateElem(L,e);
for (i = L.length-1; i >= j; --i) //移动是后面的元素,所以从后面开始找
{ //下标是从0开始,所以要-1
L.num[i+1] = L.num[i]; //后移
}
L.num[j] = e; //插入e
++L.length; //增表长
return OK;
}
int main(){
SqList S; //创建顺序表名为S结构体
SqElemType X;
int i;
InitSqList(S); //初始化
scanf("%d",&S.length);
for (i = 0; i < S.length; i++)
{
scanf("%d",&S.num[i]);
}
scanf("%d",&X);
InsertSqList(S,X);
for (i = 0; i < S.length; i++){
printf("%d,",S.num[i]);
}
system("pause"); //防止窗口闪退,+头文件
return 0;
}
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式: 在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样式:
1 2 5 -1
2 4 5 8 10 -1
输出样式:
2 5
#include
#include
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;
a=build();
b=build();
c=operate(a,b);
if(!c)
printf("NULL\n");
while(c)
{
if(c->next==NULL)
printf("%d",c->data);
else
printf("%d ",c->data);
c=c->next;
}
}
struct Node *build()
{
int a;
struct Node *head=NULL,*str=NULL;
scanf("%d",&a);
while(a!=-1)
{
struct Node *p=(struct Node*)malloc(sizeof(struct Node));
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
str->next=p;
str=p;
scanf("%d",&a);
}
return head;
}
struct Node *operate(struct Node *a,struct Node *b)
{
struct Node *head=NULL,*str=NULL;
while(a&&b)
{
if((a->data)<(b->data))
a=a->next;
else if((a->data)>(b->data))
b=b->next;
else if((a->data)==(b->data))
{
if(head==NULL)
head=a;
else
str->next=a;
str=a;
a=a->next;
b=b->next;
str->next=NULL;
}
}
return head;
}
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。
计算器由两个堆栈组成,一个堆栈 S1 存放数字,另一个堆栈 S2存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:
1. 从 S1 中弹出两个数字,顺序为 n1 和 n2;
2. 从 S2 中弹出一个运算符 op;
3. 执行计算 n2 op n1;
4. 将得到的结果压回 S1。
直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
输入格式: 输入首先在第一行给出正整数 N(1 输出格式: 将输入的数字和运算符按给定顺序分别压入堆栈 S1 和 S2,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。 题目保证计算的中间和最后结果的绝对值都不超过 109。 如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。 输入样例 1: 5 40 5 8 3 2 / * - + 输出样例 1: 2 输入样例 2: 5 2 5 8 4 4 * / - + 输出样例 2: ERROR: 5/0 设某银行有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 通过本次实验,基本掌握线性表的基本知识 ,深入理解、掌握并灵活运用线性表。熟练掌握线性表的存储结构及主要运算的实现。通过实验学习到建立顺序表,并在顺序表上实现基本运算操作,已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序 , 建立链表,并在链表上实现基本运算操作,已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3,建立顺序栈,并在栈上实现基本运算操作 ,实现栈在简易计算器的应用 ,建立循环队列,并在队列上实现基本运算操作 ,实现银行业务队列的简单模拟。链表不要求逻辑上相邻的两个数据元素物理上也相邻,它是通过“链”建立起数据元素之间的逻辑关系。因此对线性表的插入、删除不需要移动数据元素,只需要修改“链”。 通过本次实验,学会了线性表的逻辑结构特点和线性表抽象数据类型的描述方法 ;线性表的两类存储结构设计方法以及各自的优缺点;掌握线性表的基本知识 ;深入理解、掌握并灵活运用线性表;熟练掌握线性表的存储结构及主要运算的实现 ;掌握栈的定义、栈的逻辑结构特性和栈的基本运算;理解栈在表达式求值中的应用; 掌握队列的定义、队列的逻辑结构特性和栈的基本运算; 理解队列的应用。
#include
实验4:队列
银行业务队列简单模拟
#include
实验总结:(模板。。cv)