数据结构与实验报告二 您所在的位置:网站首页 数据的存储结构与数据处理实验报告 数据结构与实验报告二

数据结构与实验报告二

2024-07-09 21:37| 来源: 网络整理| 查看: 265

第一章实验目的

1.掌握线性表的链式存储结构的表示和实现方法。 2.掌握单链表基本操作的算法实现。 3.了解单链表的应用。

第二章 实验环境

硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块: DEV C++、VS2010等。

第三章 实验内容

1.编写一个程序,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计一个主程序完成如下功能:

(1)初始化单链表h;

(2)依次采用尾插法插入a、b、c、d、e元素;

(3)输出单链表h;

(4)输出单链表h的长度;

(5)判断单链表h是否为空;

(6)输出单链表h的第3个元素;

(7)输出元素a的位置

(8)在第4个元素位置上插入f元素

(9)输出单链表h;

(10)删除h的第3个元素;

(11)输出单链表h;

(12)释放单链表h。

题目描述:定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。 输入要求: 输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。 输出要求: 总计n+1行,第1行是所创建的图书表中的图书个数,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。 第四章实验步骤

实验一:

#include #include typedef char DataType; typedef struct Lnode { DataType data; struct Lnode *next; }LinkList; void Initlist(LinkList *&L) //初始化单链表 { L=(LinkList *)malloc(sizeof(LinkList));//创建头节点 L->next = NULL; } void DestroyList(LinkList *L) //销毁链表 { LinkList *p=L,*q=L->next; while(q!=NULL) { free(p); p=q; q=p->next; } free(p); } void Listempty(LinkList *L) //判断链表是否为空 { if(L->next==NULL) printf("链表为空"); else printf("链表不为空"); } int Listlength(LinkList *L)//单链表长度 { LinkList *p=L; int i=0; while(p->next!=NULL) { i++; p=p->next; } return i; } void output(LinkList *L) { LinkList *p=L->next; while(p->next!=NULL) { printf("%c ",p->data); p=p->next; } printf("%c ",p->data); printf("\n"); } int Getdata(LinkList *L,int i, DataType x)//按位置查找元素值 { LinkList *p=L; int j = 0; while(p!=NULL&&j printf("non-existent\n"); return 0; } else { x = p->data; return x; } } int Locatedata(LinkList *L,DataType x) //按照元素值查找位置 { LinkList *p=L; int j = 0; while(p!=NULL&&p->data!=x) { j++; p=p->next; } if(p==NULL) { printf("NOt Found!\n"); return 0; } else return(j); } int Insertdata(LinkList *L,int i,DataType x) //插入结点 { LinkList *p = L,*s; int j = 0; while(p!=NULL&&j printf("Place is wrong"); return 0; } else { s = (LinkList *)malloc(sizeof(LinkList)); s->data = x; s->next = p->next; p->next = s; return 1; } } int Deletelist(LinkList *L,int i,DataType x) //删除结点 { LinkList *p=L,*s; int j=0; while(p!=NULL&&j printf("Place is wrong\n"); return 0; } else { s=p->next; if(s==NULL) { printf("non-existent\n"); return 0; } x = s->data; p->next = s->next; free(s); return 1; } } int main() { LinkList *L; DataType x; printf("(1)初始化单链表:\n"); Initlist(L); printf("(2)依次采用尾插法插入a b c d e元素:\n"); Insertdata(L,1,'a'); Insertdata(L,2,'b'); Insertdata(L,3,'c'); Insertdata(L,4,'d'); Insertdata(L,5,'e'); printf("(3)输出单链表:\n"); output(L); printf("(4)链表长度为:%d\n",Listlength(L)); printf("(5)判断链表L是否为空:"); Listempty(L); //Getdata(L,3,x); printf("\n"); printf("(6)链表L的第三个元素是:%c\n",Getdata(L,3,x)); printf("(7)元素a的位置为:%d\n",Locatedata(L,'a')); printf("(8)在第4个元素位置上插入f元素\n"); Insertdata(L,4,'f'); printf("(9)输出单链表L:\n"); output(L); printf("(10)删除链表L的第3个元素\n"); Deletelist(L,3,x); printf("(11)输出链表\n"); output(L); printf("(12)释放单链表L\n"); DestroyList(L); printf("Have destroied"); }

实验二:

#include #include typedef struct node { long long int num; char name[50]; double price; struct node *next; } Book,*BookList; int main() { BookList L=NULL; Book *p,*q; int count = 0; while(1) { p=(Book *)malloc(sizeof(Book)); scanf("%lld %s %lf",&p->num,p->name,&p->price); if(p->num==0&&p->name[0]=='0'&&p->name[1]=='\0'&&p->price-0 printf("%lld %s %.2f\n",p->num,p->name,p->price); p = p->next; } return 0; } 第五章实验要求

1、用DEV C++、VS2010等工具创建文件或程序,输入代码后,进行编译运行或在控制台执行。 2、观看程序运行结果,并根据结果进行思考,对程序进行修改和总结。 实验一实验结果: 在这里插入图片描述

实验二实验结果: 在这里插入图片描述

实验认知:核心程序是如何建立链表结点。重难点在于插入结点时指针的相互转化。再者是判断结点的指针是否为空。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有