0401
实现整型数顺序表的赋值、打印、取值和查找操作
输入要求:
见代码注释
输出要求:
见代码注释
数据示例1:
输入:
5
1 3 5 7 9
0
1 1
1 5
1 0
1 6
2 5
2 2
输出:
1 3 5 7 9
1
9
Error
Error
3
Error
#include<stdio.h>
#include<stdlib.h>
// 函数结果状态码
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10 // 顺序表可能达到的最大长度
typedef int ElemType; // 元素数据类型
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; // 当前长度
} SqList; // 顺序表
/*顺序表基本操作,序号i从1开始 */
// 初始化空表
void init(SqList &L){
L.elem = new ElemType[MAXSIZE];
L.length = 0;
}
// 根据用户输入,为表中前 n 个元素赋值
void assign(SqList &L, int n);
// 遍历,打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void traverseList(SqList L);
// 取值,将序号i的元素存入e
Status getElem(SqList L, int i, ElemType &e);
// 查找,返回元素e的序号
int locateElem(SqList L, ElemType e);
int main(){
SqList list;
int cmd, result, e, n, i;
scanf("%d", &n);
init(list);
assign(list, n);
while (scanf("%d", &cmd) != EOF ) { // 选择操作
switch (cmd) {
case 0:
traverseList(list);
break;
case 1:
scanf("%d", &i);
result = getElem(list, i, e);
if (result) printf("%d\n", e);
else printf("Error\n");
break;
case 2:
scanf("%d", &e);
result = locateElem(list, e);
if (result) printf("%d\n", result);
else printf("Error\n");
break;
default:
printf("Unknow Command.\n");
break;
}
}
return 0;
}
// 根据用户输入,为表中前 n 个元素赋值
void assign(SqList &L, int n)
{
for(int i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
}
L.length=n;
}
// 遍历,打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void traverseList(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
// 取值,将序号i的元素存入e
Status getElem(SqList L, int i, ElemType &e)
{
int Error=0;
if(i<1||i>L.length)
return Error;
e=L.elem[i-1];
return e;
}
// 查找,返回元素e的序号
int locateElem(SqList L, ElemType e)
{
int Error=0;
for(int i=0;i<L.length;i++)
{
if(L.elem[i]==e)
return i+1;
}
return Error;
}
0402
实现整型数顺序表的插入和删除操作
输入要求:
见代码注释
输出要求:
见代码注释
数据示例1:
输入:
5
2 4 6 8 0
3 3 3
4 1
0
输出:
OK
OK
4 3 6 8 0
#include<stdio.h>
#include<stdlib.h>
// 函数结果状态码
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10 // 顺序表可能达到的最大长度
typedef int ElemType; // 元素数据类型
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; // 当前长度
} SqList; // 顺序表
/*顺序表基本操作,序号i从1开始 */
// 初始化空表
void init(SqList &L){
L.elem = new ElemType[MAXSIZE];
L.length = 0;
}
// 根据用户输入,为表中前 n 个元素赋值
void assign(SqList &L, int n);
// 遍历,打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void traverseList(SqList L);
// 在表中的第 i 位置插入元素 e
Status listInsert(SqList &L, int i, ElemType e);
// 删除表中的第 i 个 元素
Status listDelete(SqList &L, int i);
int main(){
SqList list;
int cmd, result, e, n, i;
scanf("%d", &n);
init(list);
assign(list, n);
while (scanf("%d", &cmd) != EOF ) { // 选择操作
switch (cmd) {
case 0:
traverseList(list);
break;
case 3:
scanf("%d %d", &i, &e);
result = listInsert(list, i, e);
if (result) printf("OK\n");
else printf("Error\n");
break;
case 4:
scanf("%d", &i);
result = listDelete(list, i);
if (result) printf("OK\n");
else printf("Error\n");
break;
default:
printf("Unknow Command.\n");
break;
}
}
return 0;
}
///
// 根据用户输入,为表中前 n 个元素赋值
void assign(SqList &L, int n)
{
for(int i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
}
L.length=n;
}
// 遍历,打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void traverseList(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
// 在表中的第 i 位置插入元素 e
Status listInsert(SqList &L, int i, ElemType e)
{
if(i<1||i>L.length+1)
return 0;
if(L.length==MAXSIZE)
return 0;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
L.length++;
return OK;
}
// 删除表中的第 i 个 元素
Status listDelete(SqList &L, int i)
{
if(i<1||i>L.length)
return 0;
for(int j=i;j<=L.length;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return OK;
}
0403
删除一个非空顺序表中第一个最大的元素
输入要求:
多组输入。
每组首先输入一个整数n(0<n<=10),表示表长,然后输入n个整数
输出要求:
输出删除操作后表中元素,每个元素后面有一个空格,输出结束后换行。
数据示例1:
输入:
1 1
3 1 2 3
3 3 2 1
输出:
1 2
2 1
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10 // 顺序表可能达到的最大长度
typedef int ElemType; // 元素数据类型
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; // 当前长度
} SqList; // 顺序表
// 根据用户输入,创建长度位n的顺序表
void createList(SqList &L, int n);
// 打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void printList(SqList L);
// 删除非空顺序表中的第一个最大元素
void deleteMax(SqList &L);
int main(){
int n;
while(~scanf("%d", &n)){
SqList L;
createList(L, n);
deleteMax(L);
printList(L);
}
return 0;
}
///
// 根据用户输入,创建长度位n的顺序表
void createList(SqList &L, int n)
{
L.elem=new ElemType[MAXSIZE];
for(int i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
}
L.length=n;
}
// 打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void printList(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
// 删除非空顺序表中的第一个最大元素
void deleteMax(SqList &L)
{
int o,i,max=0;
for(i=0;i<L.length;i++)
{
if(L.elem[i]>max)
{
max=L.elem[i];
o=i;
}
}
for(int j=o;j<L.length;j++)
L.elem[j]=L.elem[j+1];
L.length--;
}
0404
复制非空顺序表中第一个最小元素
输入要求:
多组输入。
每组首先输入一个整数n(0<n<=9),表示表长,然后输入n个整数
输出要求:
输出复制操作后表中元素,每个元素后面有一个空格,输出结束后换行。
数据示例1:
输入:
1 1
3 1 2 3
3 3 2 1
输出:
1 1
1 1 2 3
3 2 1 1
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10 // 顺序表可能达到的最大长度
typedef int ElemType; // 元素数据类型
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; // 当前长度
} SqList; // 顺序表
// 根据用户输入,创建顺序表
void createList(SqList &L, int n);
// 打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void printList(SqList L);
// 复制非空顺序表中第一个的最小的元素
void duplicateMin(SqList &L);
int main(){
int n;
while(~scanf("%d", &n)){
SqList L;
createList(L, n);
duplicateMin(L);
printList(L);
}
return 0;
}//
// 根据用户输入,创建顺序表
void createList(SqList &L, int n)
{
L.elem=new ElemType[MAXSIZE];
L.length=0;
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
}
L.length=n;
}
// 打印表中元素,
// 每个元素后一个空格,输出全部元素后换行
void printList(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
// 复制非空顺序表中第一个的最小的元素
void duplicateMin(SqList &L)
{
int min=0,i=0,o=0;
for(i=0;i<L.length;i++)
{
min=L.elem[0];
if(min>L.elem[i])
{
min=L.elem[i];
o=i;
}
}
for(int j=L.length-1;j>=o;j--)
L.elem[j+1]=L.elem[j];
L.elem[o]=min;
L.length++;
}
0405
完成学生顺序表的初始化、输出、插入和删除操作。
假设列表的中学生是按照id升序排列的,并且学生的id不重复。
输入要求:
见代码注释
输出要求:
见代码注释
数据示例1:
输入:
1 121 aaa 20
1 121 aaa 20
2 121
1 123 abc 100
0
1 111 bbb 100
1 131 ccc 50
0
2 100
2 120
2 133
0
2 111
2 131
0
输出:
123 abc 100
111 bbb 100
123 abc 100
131 ccc 50
111 bbb 100
123 abc 100
131 ccc 50
123 abc 100
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 16 // name最大字符数
#define MAXS 20 // 最大学生数
typedef struct{
int id;
char name[MAXN];
int score; // 成绩
}Stud;
typedef struct{
Stud *elem;
int length;
}StdList;
// 初始化一个空的学生列表
void init(StdList &L);
// 输出列表中的所有学生信息
// 包括id、name和成绩,中间以空格分隔
void output(StdList L);
// 根据id, name, score,将学生插入到列表适当的位置
// 如果用户输入的id已存在,则插入失败
// 不必考虑列表已满的情况
void insert(StdList &L, int id, char *name, int score);
// 根据id删除学生
// 如果id不存在,则删除失败
void del(StdList &L, int id);
int main(){
StdList list;
int cmd, id, score;
char name[MAXN];
init(list);
while (scanf("%d", &cmd) != EOF ) { // 选择操作
switch (cmd) {
case 0:
output(list);
break;
case 1:
scanf("%d %s %d", &id, name, &score);
insert(list, id, name, score);
break;
case 2:
scanf("%d", &id);
del(list, id);
break;
}
}
return 0;
}
// 初始化一个空的学生列表
void init(StdList &L)
{
L.elem=new Stud[MAXS];
L.length=0;
}
// 输出列表中的所有学生信息
// 包括id、name和成绩,中间以空格分隔
void output(StdList L)
{
for(int i=0;i<L.length;i++)
printf("%d %s %d\n",L.elem[i].id,L.elem[i].name,L.elem[i].score);
}
// 根据id, name, score,将学生插入到列表适当的位置
// 如果用户输入的id已存在,则插入失败
// 不必考虑列表已满的情况
void insert(StdList &L, int id, char *name, int score)
{
int o=0;
for(int h=0;h<L.length;h++)
{
if(id==L.elem[h].id) o=1;// 如果用户输入的id已存在,则插入失败
}
if(o==0)
{
L.elem[L.length].id=id;
strcpy(L.elem[L.length].name,name);
L.elem[L.length].score=score;
L.length++;
if(L.length>1)
{
for(int i=0;i<L.length-1;i++)
{
for(int p=0;p<L.length-i-1;p++)
{
if(L.elem[p].id>L.elem[p+1].id)
{
Stud temp=L.elem[p];
L.elem[p]=L.elem[p+1];
L.elem[p+1]=temp;
}
}
}
}
}
}
// 根据id删除学生
// 如果id不存在,则删除失败
void del(StdList &L, int id)
{
int o=0,p=0;
for(int i=0;i<L.length;i++)
{
if(id==L.elem[i].id){
o=i;p=1;
}
}
if(p==1)
{
for(int j=o;j<L.length-1;j++)
L.elem[j]=L.elem[j+1];
L.length--;
}
}