4-2 顺序表操作集 (20分)
来源:互联网 发布:mac app store dns 编辑:程序博客网 时间:2024/05/16 10:51
本题要求实现顺序表的操作集。
函数接口定义:
List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );
其中List结构定义如下:
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
各个操作函数的定义为:
List MakeEmpty():创建并返回一个空的线性表;
Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;
bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;
bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5#define ERROR -1typedef enum {false, true} bool;typedef int ElementType;typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );int main(){ List L; ElementType X; Position P; int N; L = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); if ( Insert(L, X, 0)==false ) printf(" Insertion Error: %d is not in.\n", X); } scanf("%d", &N); while ( N-- ) { scanf("%d", &X); P = Find(L, X); if ( P == ERROR ) printf("Finding Error: %d is not in.\n", X); else printf("%d is at position %d.\n", X, P); } scanf("%d", &N); while ( N-- ) { scanf("%d", &P); if ( Delete(L, P)==false ) printf(" Deletion Error.\n"); if ( Insert(L, 0, P)==false ) printf(" Insertion Error: 0 is not in.\n"); } return 0;}/* 你的代码将被嵌在这里 */
输入样例:
6
1 2 3 4 5 6
3
6 5 1
2
-1 6
输出样例:
FULL Insertion Error: 6 is not in.
Finding Error: 6 is not in.
5 is at position 0.
1 is at position 4.
POSITION -1 EMPTY Deletion Error.
FULL Insertion Error: 0 is not in.
POSITION 6 EMPTY Deletion Error.
FULL Insertion Error: 0 is not in.
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5#define ERROR -1typedef enum {false,true} bool;typedef int ElementType;typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );int main(){ List L; ElementType X; Position P; int N; L = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); if ( Insert(L, X, 0)==false ) printf(" Insertion Error: %d is not in.\n", X); } scanf("%d", &N); while ( N-- ) { scanf("%d", &X); P = Find(L, X); if ( P == ERROR ) printf("Finding Error: %d is not in.\n", X); else printf("%d is at position %d.\n", X, P); } scanf("%d", &N); while ( N-- ) { scanf("%d", &P); if ( Delete(L, P)==false ) printf(" Deletion Error.\n"); if ( Insert(L, 0, P)==false ) printf(" Insertion Error: 0 is not in.\n"); } return 0;}List MakeEmpty(){ //置空 List L; L=(List*)malloc(sizeof(List)); L->Last=-1; return L;} Position Find( List L, ElementType X ){ int i; for(i=0;i<=L->Last;i++){ //查找 if(L->Data[i]==X) return i; } return ERROR;}bool Insert( List L, ElementType X, Position P ){ if( L->Last+1 == MAXSIZE ){ //若最后一个元素下标+1为max则顺序表已满 printf( "FULL" ); return false; } if( 0 > P || P > ( L->Last + 1 )){//插入位置必须大于等于0,或者小于等于Last+1 printf( "ILLEGAL POSITION" ); return false; } for(int i=L->Last;i>=P;i--){ //从后面开始移动 L->Data[i+1]=L->Data[i]; } L->Data[ P ] = X; L->Last++; return true;}bool Delete( List L, Position P ){ if(P<0||P>L->Last){ //删除位置必须是[0,Last]之间 printf("POSITION %d EMPTY",P); return false; } else{ int i; for(i=P;i<L->Last;i++){ L->Data[i]=L->Data[i+1]; } L->Last--; return true; }}
题目链接:
https://pta.patest.cn/pta/test/15/exam/3/question/725
- 4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集 (20分) PTA
- PTA数据结构与算法题目集(中文)4-2 顺序表操作集 (20分)
- 4-2 顺序表操作集
- 4-2 顺序表操作集
- PTA 顺序表基本操作(10 分)
- PTA 6-1 顺序表基本操作(10 分)
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分) PTA
- 顺序表操作集
- 顺序表操作集
- 顺序表操作集
- 剑指offer(32)-数组中的逆序对
- All consistent reads within the same transaction read the snapshot established by the first read.
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- 第四十讲 项目5 张三、李四、王五、刘六的年龄等差问题
- IOS开源框架SJFramework-设计过程
- 4-2 顺序表操作集 (20分)
- 535 5.7.8 Error: authentication failed: generic failure
- NYOJ 592 spiral grid (BFS)
- Crosswalk Project for Android
- 1、什么是Lucene,Lucene能干什么
- Android插件化开发技术
- eclispe下创建web gradle项目
- HDU-2888 Check Corners(二维RMQ)
- Javascript中button按钮的onclick()事件传递参数