数据结构———初试小例

hello~uu们好久不见,这学期我们学习的是数据结构。

快来跟着我的步伐,一起去探索抽象的数据结构吧!

今天我们先从一个简单的线性表系统开始学习!

【例】唐诗

一、实验目的

1、掌握线性表的逻辑结构、存储结构及基本操作;

2、针对计算机领域复杂工程问题,能够综合运用数据结构的基本理论和设计方法,设计出合理的算法。

二、实验内容

唐诗在中国文学史上具有举足轻重的地位,它不仅代表了唐代文学的最高成就,也是中国古代诗歌发展的重要里程碑。唐诗以其独特的艺术魅力和深刻的思想内涵,对后世产生了深远的影响。唐诗以其独特的艺术魅力、深刻的思想内涵和丰富的文化价值,成为了中国文学史上的瑰宝。它不仅代表了唐代文学的最高成就,也为后世文学发展提供了丰富的资源和借鉴。

唐诗的派别主要分为山水田园诗派和边塞诗派。同时,唐诗还具有极高的历史价值和文化价值,是我们了解唐代社会和传承中国传统文化的重要途径之一

请根据所学的知识,对唐诗进行抽象,采用合适的存储结构进行存储,并能够进行相关的操作。

三、算法描述

(自己总结的)

定义结构体变量,用于储存唐诗信息。主函数用switch语句,实现增加插入查找删除等功能。

初始化一个空表,查找时将错误信息定义为负数,若未找到就返回错误信息,

反之,找到后返回存储位置。

删除时检查空表及位置的合法性,将位序i+1及以后的元素向前移动,接着是销毁函数。

插入时在表的第i个元素插入(记得验满和i++)。

四、详细设计

接下来我将用图示解释

五、程序代码

(已给出必要注释)

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define MAXSIZE 12
#define ERROR -1
typedef struct tangshi ElementType;
typedef struct LNode * List;
struct tangshi{
 char shiming[40];
 char zuozhe[20];
 char neirong[100];
 char shiyi[200];
};
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
//1.函数首部,为下一步的函数实现起指导作用
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表
//2、顺序表中的函数实现
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){
int j;
if(L->Last==MAXSIZE-1){
printf("表已经满了"); //1.判定是否满;
return false;
}
if(i<1||i>L->Last+2)
{
printf("不合法"); //2.判定位序是否合法;
return false;
}
for(j=L->Last;j>=i-1;j--) //3.移动;4.插入;5.表长加1
{
L->Data[j+1]=L->Data[j];
}
 L->Data[i-1]=X;
 L->Last++;
 return true;  
}
//删除 注意:位序为i的元素 ,下标是i-1位置的元素 ,合法的位序为1<=i<=L->Last+1
bool Delete(List L,int i)
{
if(L->Last==-1)
{ //1.判定是否为空;
printf("表空");
return false;
}
if(i<1||i>L->Last+1)
{
printf("不合法"); //2.判定位序是否合法;
return false;
}
for(int j=i;j<=L->Last;j++){ //3.通过移动数据直接删除;4.表长减去1
L->Data[j-1]=L->Data[j];
}
L->Last--;
return true;
}
//销毁
void Destroy(List L){
if(L)
free(L);
}
//数据显示  
void Display(List L){
for(int i=0;i<=L->Last;i++){
printf("%d-%s-%s\n",L->Data[i].shiming,L->Data[i].zuozhe,L->Data[i].neirong,L->Data[i].shiyi);
}
printf("\n");
}
int main(void)
{
    int i;
    List L=MakeEmpty();
    ElementType Data;
    int choice;
while(1){
    printf("\n\t唐诗管理系统\n1.增加新诗\n2.插入\n3.查找\n4.删除\n5.输出\n6.退出\n");
    printf("您的选择:");
    scanf("%d",&choice);
if(choice==6)
    break;
switch(choice)
{
case 1:
    printf("请输入诗的诗名:");
    scanf("%s",&Data.shiming);
    printf("请输入诗的作者:");
    scanf("%s",&Data.zuozhe);
    printf("请输入诗的内容;");
    scanf("%s",&Data.neirong);
    Insert(L,Data,L->Last+2);
    Display(L);
    break;
case 2:
    printf("请输入插入的位置:");
    scanf("%d",&i);
    printf("请输入诗的诗名:");
    scanf("%s",&Data.shiming);
    printf("请输入诗的作者:");
    scanf("%s",&Data.zuozhe);
    printf("请输入诗的内容;")
    scanf("%s",&Data.neirong);
    Insert(L,Data,i);
    Display(L);
    break;
case 3:
     printf("请输入要查找的诗名:");
     ElementType NewData;
     scanf("%s",NewData.shiming);
     printf("%d\n",Find(L,NewData));
     break;
case 4:
    printf("请输入要删除的元素的位置");
    scanf("%d",&i);
    Delete(L,i);
    Display(L);
    break;
case 5:
    Display(L);
 }  
}
Destroy(L);
return 0;
}

六、测试

这个部分同学们可以在自己的dev c++或者vs上进行调试

根据字幕的提示,依次实行你想要进行的功能。

同学们快来试试吧!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值