6-2 顺序表操作集(20 point(s))
来源:互联网 发布:淘宝退货折旧费怎么算 编辑:程序博客网 时间:2024/06/09 16:33
6-2 顺序表操作集(20 point(s))
本题要求实现顺序表的操作集。
函数接口定义:
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;}/* 你的代码将被嵌在这里 */
输入样例:
61 2 3 4 5 636 5 12-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.code:
List MakeEmpty(){ List p; p = (List)malloc(sizeof(struct LNode)); p->Last = -1;//这里令last为-1,这样可以last每次指的就是最后一个数据,而不是下一个数据的下一个 return p;}Position Find( List L, ElementType X ){ int i; for(i = 0; i <= L->Last; i++){ if(X==L->Data[i]){//遍历搜索查找 return i; } } return ERROR;}bool Insert( List L, ElementType X, Position P ){ if(L->Last==MAXSIZE-1){//容量慢 printf("FULL"); return false; } if(P<0||P>L->Last+1){//只能查到已有数字的位置或最后一个的下一个 printf("ILLEGAL POSITION"); return false; } int i; for(i = L->Last+1; i > P; i--){ L->Data[i] = L->Data[i-1];//向右平移 } L->Data[i] = X;//插入 L->Last++;//个数增加 return true;}bool Delete( List L, Position P ){ int i; //if(L->Last==-1)return false;//为空!!!因为这一句多此一举的判断导致为空时应输出empty没输出 if(P<0||P>L->Last){//删除的位置不在已有位置内 printf("POSITION %d EMPTY",P); return false; } for(i = P; i < L->Last; i++){//删除后向左平移 L->Data[i] = L->Data[i+1]; } L->Last--;//减少一个 return true;}
阅读全文
0 0
- 6-2 顺序表操作集(20 point(s))
- 6-5 链式表操作集(20 point(s))
- 6-6 带头结点的链式表操作集(20 point(s))
- 6-12 二叉搜索树的操作集(30 point(s))
- 6-1 单链表逆转(20 point(s))
- 6-9 求二叉树高度(20 point(s))
- 6-13 Percolate Up and Down(20 point(s))
- 6-14 Add Two Polynomials(20 point(s))
- 6-19 Count Connected Components(20 point(s))
- 04-树7 二叉搜索树的操作集(30 point(s))
- 6-7 Deque(25 point(s))
- 6-2 PTA顺序表操作集
- 6-20 No Less Than X in BST(20 point(s))
- 6-18 Two Stacks In One Array(20 point(s))
- 6-3 求链式表的表长(10 point(s))
- 7-13 求链式线性表的倒数第K项(20 point(s))
- 6-4 链式表的按序号查找(10 point(s))
- 6-17 Shortest Path [2](25 point(s))(dijkstra)
- NOIP复赛复习(八)STL算法与树结构模板
- Android Studio的安装与下载
- 6-1 单链表逆转(20 point(s))
- IntelliJ IDEA中怎么查看文件中所有方法(类似eclipse里面的outline)
- 任玉刚:让你的职业迷茫从哪来回哪去
- 6-2 顺序表操作集(20 point(s))
- 安卓四大组件和进程之间关系
- 第一次做表格的样式
- NOIP复赛复习(七)STL容器与字符串模板
- 6-3 求链式表的表长(10 point(s))
- 推荐一个公众号【前端日刊】,干货很多
- 图文解说 JavaScript this 到底指向什么?
- 2017年“双十一”剁手党史上最全面购物指南
- Bootstrap学习笔记 06