C语言程序设计任务2:增加图书信息主讲:付世凤目 录CONTENTS目 录CONTENTS任务陈述C语言程序设计完成一个程序,使用链表存放图 书信息,并能通过链表的插入操作完成图书信息的添加,要求:(1)从键盘中输入添加图书记录的位置(2)从键盘中输入一个图书记录的ISB N、Name、Price、Author、Publisher等信息(3)调用InsertList函数将图书记录添加到链表特定位置运行 结果图-1 运行结果图目 录CONTENTS数据物理存储方式概念:链表一种数据的物理存储方式,链表以结点为单位来存储数据,每个结点 存放一个数据元素,每个结点的内存单元在内存中并不连续链表概念什么是链表连续存储:数组索引存储 哈希存储链式存储:链表链表结点中指针 域存放下一节点地址链表概念C语言程序设计为什么使用链表124532213452链式存储链表操作C语言程序设计链表操作C语言程序设计 目 录CONTENTS精典案例C语言程序设计【例8-2】编写程序,使用链表实现多元素存储,元素个数从键盘输入,定义链表头指针L,然 后建立链表,最后遍历链表。分析:1、定义num存放数组元素个数;2、定义链表头指针L3、定义可以移动的指针p,首先指向链表头结点, 然后开始循环完成链表建立,循环体重复执行 (1)申请新结点内存, (2)将键盘输入数据写入各结点数据域 ( 3)将新结点链接至链表4、指针a回溯到链表首元素结点,重头遍历链表,输出链表各元素内容。include str uct Lnode{//自定义数据类型,类型名为Lnode int data;//成员1存放数据 struct Ln ode next;//成员2存放下一结点地址}; int main(){ int num; struct Lno de L,p,newNode; L=new Lnode; L->next=NULL;//定义链表头结点L p=L; printf("请输入需要存放数据的结点数:"); scanf("%d",&num); f or(int i=0;i (Lnode));//新建结点 scanf("%d",&newNode->data);//输入数据到成员data newNode->next=p->next;//将新结点加入链表 p->next= newNode ; //将新结加入链表 p=p->next;//移动指针便于下一次循环,将新节点加入链表 } p= L->next; printf("输出链表中结点点内容:"); while(p) { p rintf("%d ",p->data); p=p->next; } return 0;}目 录 CONTENTS任务描述C语言程序设计完成一个程序,使用链表存放图书信息,并能通过链表的插入操作完成图书信息的添加,要求:(1)从 键盘中输入添加图书记录的位置(2)从键盘中输入一个图书记录的ISBN、Name、Price、Author、Publisher等信息 (3)调用InsertList函数将图书记录添加到链表特定位置任务实施流程(1)分析解决该任务的步骤、方法(2)把解决该任务的步骤 (算法)用流程图进行描述(4)测试执行程序C语言程序设计(3)根据流程图编写程序算法及程序流程图C语言程序设计(1) 定义描述图书 信息结构体Book;(2) 定义结构体变量Book1;(3 )定义描述结点信息的结构体Node;(4)定义Node类型的指针Hea d;(5)调用InitList函数,完成链表的初始化,得到一个以Head为头指针的空链表;(6)开始循环,循环次数为3次,循环过程 中执行如下操作 1)输入插入图书记录的位置。 2)输入一个图书记录的ISBN、Name、Price、Author、Pu blisher等信息,并将其写入Book1中的各个成员中。 3)调用InsertList函数将Book1所存图书记录添加到链 表Head对应位置。 4)根据InsertList函数返回值,输出不同的提示信息。算法思路指针变量H为代表链表的头指针、i插 入位置、B存储图书记录信息判定插入位置i是否合法定义可以移动的指针变量P,首先指向头结点申请一个新结点,并让指针变量s指向该结点将 要添加图书记录的所有信息拷贝到新结点的数据域图-2 InsertList函数流程图循环过程中指针变量P移动至后一结点指针变量p移动 到最后一个结点或者移动到第i-1个结点循环结束将指针s指向的新结点链接到指针p指向的第i-1结点后 编写程序C语言程序设计程序流程 图bool InsertList(Node &H,int i,Book B){ if(i<1||i>ListLength(H)+ 1) return false; int k=0; Node p=H; while(p!=NULL&&k { p=p->next; k++; } Node s=(Node)malloc(sizeof(Node)); s->da ta=B; s->next=p->next; p->next=s; return true; } 测试程序C语言程序设计运行结果小 结C语言程序设计本任务主要实现了增加图书信息算法的思路是:(1) 定义结构体及结构体变量存放图书信息(2) 定义链表的头指针Hea d,链表将存放若干图书记录(3)调用InitList函数,完成链表的初始化,得到一个以Head为头指针的空链表(4)调用InsertList函数将图书记录添加到链表中通过任务的学习掌握链表的定义,链表的初始化、链表的插入、链表的遍历等操作,任务的关键是,定义链表存放图书信息,通过链表的插入操作完成图书信息添加C语言程序设计再见 |
|