数据结构与算法实验报告一
一、实验目的
1、掌握线性表的逻辑结构、存储结构及基本操作;
2、针对计算机领域复杂工程问题,能够综合运用数据结构的基本理论和设计方法,设计出合理的算法。
二、实验内容
唐诗在中国文学史上具有举足轻重的地位,它不仅代表了唐代文学的最高成就,也是中国古代诗歌发展的重要里程碑。唐诗以其独特的艺术魅力和深刻的思想内涵,对后世产生了深远的影响。
唐诗的派别主要分为山水田园诗派和边塞诗派。
唐诗的发展可以分为初唐、盛唐、中唐和晚唐四个阶段。
唐诗以其独特的艺术魅力、深刻的思想内涵和丰富的文化价值,成为了中国文学史上的瑰宝。它不仅代表了唐代文学的最高成就,也为后世文学发展提供了丰富的资源和借鉴。同时,唐诗还具有极高的历史价值和文化价值,是我们了解唐代社会和传承中国传统文化的重要途径之一
请根据所学的知识,对唐诗进行抽象,采用合适的存储结构进行存储,并能够进行相关的操作。
提示:分别用顺序表和链表实现唐诗的存储及相关操作。
三、算法描述
(采用自然语言描述)
目的:该算法旨在对唐诗进行抽象,采用合适的存储结构进行存储,并能够进行相关的操作如录入,插入,查找,删除,显示。
这段代码是一个简单的唐诗管理系统,它使用顺序表(一种线性表)来存储唐诗的信息。顺序表是通过结构体`LNode`和`tangshi`来定义的,其中`tangshi`结构体包含了唐诗的名字、作者和内容。
系统提供了以下功能:
1. **新增唐诗**:用户可以输入一首唐诗的名称、作者和内容,然后将其插入到顺序表的末尾。
2. **插入唐诗**:用户可以指定一个位置,将一首唐诗插入到顺序表中该位置之后。如果指定的位置不合法,程序会提示错误。
3. **查找唐诗**:用户可以通过唐诗的名字来查找其在顺序表中的位置。如果找到,返回唐诗的位置;如果没有找到,返回错误。
4. **删除唐诗**:用户可以指定一个位置来删除顺序表中的唐诗。删除操作会覆盖被删除位置的元素,并将后面的元素向前移动。
5. **显示顺序表中的所有唐诗**:这个功能会遍历顺序表中的所有唐诗,并打印出它们的名称、作者和内容。
整个系统的操作是通过一个主循环来实现的,用户可以通过选择不同的选项来执行不同的操作。程序使用`scanf`函数来获取用户的输入,并使用`printf`函数来显示信息和提示用户。
这个系统还包含了一些基本的错误处理,例如在插入、查找和删除操作中,如果提供的位置不合法,程序会提示错误信息。此外,系统还提供了顺序表的创建、销毁和显示功能,以确保顺序表在使用过程中能够正确地管理内存。
四、程序代码
(给出必要注释)
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define MAXSIZE 12
#define ERROR -1
typedef struct tangshi ElementType;
typedef struct LNode * List; //List代表顺序表类型,实为结构指针,指向struct LNode
struct tangshi{
char shiming[50];
char zuozhe[10];
char neirong[200];
};
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
List MakeEmpty(); //建空表
int Find(List L,ElementType X); //按值查找
bool Insert(List L,ElementType X,int i); //将X插入到L表的第i位置
bool Delete(List L,int i); //删除L表的第i元素
void Destroy(List L); //销毁表L
void Display(List L); //打印L表
//建立一个空顺序表
List MakeEmpty(){
List L;
L=(List)malloc(sizeof(struct LNode));
L->Last=-1;
return L;
}
//按照值查找
int Find(List L,ElementType X){
int i=0;
while ((i<=L->Last)&&strcmp(L->Data[i].shiming,X.shiming) !=0)
{
i++;
}
if(i>L->Last) return ERROR;
else return i+1;
}
bool Insert(List L,ElementType X,int i){
//1.判定是否满;2.判定位序是否合法;3.移动;4.插入;5.表长加1
int j;
if(L->Last==MAXSIZE-1){
printf("表已经满了");
return false;
}
if(i<1||i>L->Last+2){
printf("不合法");
retur