6-2 顺序表操作集 (20 分)

本题要求实现顺序表的操作集。

函数接口定义:

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 -1
typedef 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);elseprintf("%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.

正确代码:

List MakeEmpty()
{//创建并返回一个空的线性表;List L = (List)malloc(sizeof(struct LNode));L->Last = -1;return L;
}
Position Find( List L, ElementType X )
{//返回线性表中X的位置。若找不到则返回ERROR;Position 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 )
{//将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;if(L->Last>=MAXSIZE-1){printf("FULL");return false;}else if(P < 0 || P > L->Last+1 || P >= MAXSIZE){printf("ILLEGAL POSITION");return false;}else{int i;for(i=L->Last+1; i>P; i--){L->Data[i] = L->Data[i-1];}
//        for(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 )
{//将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。if(P<0 || P>L->Last){printf("POSITION %d EMPTY",P);return false;}else{int i=P;if(P!=L->Last){for(i=P; i<L->Last; i++){L->Data[i] = L->Data[i+1];}}L->Last--;return true;}
}

这个题,我可真是!@#$%^& (小嘴抹蜜),气死我了。。。好几遍硬是没找出错误来

犯的傻:

首先!!上来!!!最让我生气的!!!就是Create的时候,malloc的时候!!!我写成了(sizeof(List))!!!开始的时候MAXSIZE==5还没错,但是后面改成7就错了。这一点我调试了半天,都没发现。而且Code::Blocks很奇怪,Debug时内存他申请的就是正好的,运行,输出,结果完全没问题,但是如果是Run就直接内存崩掉。最后去找了别人的答案,对了够十遍,才发现这一个单词的不对。。。其他的基本上都是一样的除了一些临时变量名字(也没几个所以说后来改成一样的了)。啊!!!List是个指针,而不是节点啊!!!

其次就是我的锅了,是真的傻了。没搞清线性表顺序表数组的定义和区别,以为就是结构体里的数组可以随便用的,所以说以为从0--4的位置随便插入,然后L->Last指向最后一个不为空的值就行(意思就是比如 Data = {1, 2, NULL, 3, NULL, 5},但是不行)。顺序表必须是连续的。开始感觉写的完全没错(那只是结构体里的数组变量操作而已),后来灵光一闪,GUN回去重新看了课本上的定义,才发现自己沙比了。

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。

数据结构全忘没了啊!!!你特喵的重新滚回去看!!!做题之前重新看课本!!!丢人啊!!!

(PTA数据结构与算法) 6-2 顺序表操作集 ——请告诉我什么是顺序表!!!相关推荐

  1. PTA数据结构与算法题目集6-4 6-3 6-8

    PTA数据结构与算法题目集(中文) 6-4 链式表的按序号查找 ElementType FindKth( List L, int K ){int index = 0;while(L){++index; ...

  2. PTA:6-2顺序表操作集(20分)

    大一下半期数据结构 数据结构题目集 PTA:顺序表操作集(20分) 本题要求实现顺序表的操作集. 函数接口定义 List MakeEmpty(); Position Find( List L, Ele ...

  3. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

  4. 数据结构与算法 学习笔记(8):字典、集合、哈希表

    数据结构与算法 学习笔记(8):字典.集合.哈希表 本次文章记录的是和字典.集合.哈希表等数据结构相关的LeetCode算法题(题号与LeetCode对应),包括其构造和使用,针对每一题或一类题给出了 ...

  5. PTA数据结构与算法题目集(中文) 函数题 (1)

    4-1 单链表逆转 code: List Reverse(List head) {if(NULL==head|| NULL==head->Next)return head;List p;List ...

  6. 数据结构与算法之循环队列的操作

    数据结构与算法之循环队列的操作 /* 循环队列的入队和出队算法设计 初始化循环队列 .打印队列.插入元素到循环队列.获取循环队列的首元素,元素不出队.出队.获取循环队列元素个数.判断循环队列的空和满. ...

  7. 带头结点的链式表操作集

    6-6 带头结点的链式表操作集 (20 分) 本题要求实现带头结点的链式表操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementTy ...

  8. 浙大PTA数据结构与算法题目集(中文)题解集复习用

    文章目录 7-1 最大子列和问题 (20分)(dp或贪心) 7-2 一元多项式的乘法与加法运算 (20分) 7-3 树的同构 (25分) 7-4 是否同一棵二叉搜索树 (25分) 7-5 堆中的路径 ...

  9. 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现

    公路村村通 非常直白的最小生成树问题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通 ...

最新文章

  1. html中输入框的创建
  2. vue的指令绑定、事件、冒泡
  3. 为什么要叫python-为什么要学 Python?
  4. python有强大吗_python有多强大
  5. 9i DB_FILE_MULTIBLOCK_READ_COUNT参数和extent大小的设置
  6. 条件随机场(CRF)相关理论知识
  7. java中事务实例,Java Spring 事务管理器入门例子教程(TranscationManager)
  8. error LNK2005: _DllMain@12 already defined in MSVC
  9. 今天讲个小故事,Javascript诞生记
  10. python的pyqt5教程_python PyQt5初级教程hello world
  11. 基于MATLAB的人脸识别
  12. 软件测试,2019.2.15中移物联网面试心路历程。
  13. 若依 数据权限图文详细理解及改造
  14. 导航星历的钟差,TGD问题
  15. python基础试题(1)
  16. byte数组转blob类型_Jfinal 存byte[] 到mysql数据库中blob类型
  17. ArcGIS Runtime Esri新的离线地图数据格式——移动地图包(转载自Esri中国)
  18. MyEclipse如何复制项目、无法修改web-context-root问题解决办法/ Repeated column in mapping for entity
  19. [转载]我的老师唐圭璋先生(王兆鹏)_RWERWERWE_96921_新浪博客
  20. Git之显示分支关系图(十五)

热门文章

  1. Matlab中的元胞数组
  2. 异常与处理--python
  3. Git: Cannot update paths and switch to branch 'feature' at the same time.
  4. 如何快速提升网站排名流量
  5. Python学习之title()函数
  6. 南怀瑾 100句 渺小_让我们与tinyGo一起变得渺小
  7. MySQL趋势与前景技术分享
  8. js中判断字符串是否相等,使用 == 或===
  9. python中类的继承关系使用什么符号表示_智慧职教: Python中类的继承关系使用( )符号表示?...
  10. Python发送邮件实例