数据结构与算法实验报告一(唐诗)

数据结构与算法实验报告

一、实验目的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值