华东交通大学 软件学院 上机/实验报告册
专 业____________________________ 班 级____________________________ 姓 名____________________________ 课程名称____________________________ 教 师____________________________ 学 期____________________________
软件学院上机实验报告
备注:学生应根据实验的要求,设计一个实验过程(包括程序代码、各种定义说明),并根据实验的结论及实验过程中出现的情况(错误、异常等)得出的体会。要求学生每人一台计算机,独立完成实验的全过程。
实验题目: 单链表的实现
实验目的: 1.掌握单链表的逻辑结构
2.掌握单链表的存储结构和结构特点 3.掌握单链表基本操作的实现和指针的操作 4.了解单链表基本操作的效率和特点 实验要求: 1.线性表的抽象数据类型
2. 单链表存储结构的C++语言定义
3. 单链表基本操作的实现:⑴初始化⑵销毁⑶创建⑷获取元素⑸插
入⑹删除
4.单链表的使用 5.实验结果 实验内容:
1. 线性表的抽象数据类型
ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,……,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。 Operation InitList(*L): 初始化操作,建立一个空的线性表L。 ListEmpty(L): 若线性表为空,返回ture,否则返回false。 ClearList(*L): 将线性表清空。 GetElem(L,i,*e): 将线性表L中的第i个元素值返回给e。 LocateElem(L,e): 在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。
2. 单链表存储结构的C++定义:
/*线性表的单链表存储结构*/ typedef struct Node {Elemtype data; Struct Node *next; }Node; Node *Linklist; /*定义Linklist*/
3.单链表基本操作的实现:
㈠ 初始化:
InitList(*L)
{L=(LinkList)malloc(sizeof(LinkList)) L->next=NULL return L; } ㈡ 销毁:
/*初始条件:线性表L已存在;操作结果:将L重置为空表*/ Status ClearList (LinkList *L) { LinkList p,q; p=(*L)->next; While (p) {q=p->next; free(p); p=q; }
(*L)->next=NULL; return OK; } ㈢ 创建:
/*随机产生n个元素的值,建立带头结点的单链表L(头插法)*/ Void CreateListHead (LinkList *L,int n) {LinkList p; int I;
srand(time(0));
*L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; For(i=0,i {p=(LinkList)malloc(sizeof(Node)); p->data=rand( )0+1; p->next=(*L)->next; (*L)->next=p; } } ㈣ 获取元素: /*初始条件:顺序线性表L已存在,1≤i≤ListLength(L)*/ /*操作结果:用e返回L中第i个数据元素的值*/ Status GetElem(LinkList L,int i,ElemType *e) {int j; LinkList p; p=L->next; j=1; while(!p==NULL&&jnext; ++j; } if (!p ||j>i) return ERROR; *e=p->data; return OK; } ㈤ 插入: /*初始条件:线性表L已存在,1≤i≤ListLength(L)*/ /*操作结果:在L中第i个位置之前插入新的数据元素e,L长度加1*/ Status ListInsert(LinkList *L,int i,ElemType e) {int j; LinkList p,s; p=*L j=1; while(p&&jnext; ++j; } If (!p ||j>i) return ERROR; s=(LinkList)malloc(sizeof(Node)); s->data=e; s->next=p->next; p->next=s; return OK; } ㈥ 删除: /*初始条件:线性表L已存在,1≤i≤ListLength(L)*/ /*操作结果:删除L的第i个数据元素,并用e返回其值,L长度减1*/ Status ListDelete (LinkList *L,int i,ElemType *e) {int j; LinkList p, q; p=*L; j=1; while (p->next||j>i ) {p=p->next; ++j; } If (! (p->next) ||j>i ) return ERROR; q=p->next; p->next=q->next; *e=q->data; Free(q); return OK; } 4.单链表的应用 本应用为设计了一个学生成绩管理系统 源代码如下: //简单成绩管理系统。 #include int stuNo; char name[20]; int score; //这里假设为整型,其实为实数比较妥当。 }; typedef struct link { struct studentstr Data; struct link * next; }LinkList; int linkListLen(LinkList * head) //返回链表长度,这样可以很容易计算学生编号。 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库学生成绩管理系统 - 数据结构上机实验报告Yangtze在线全文阅读。
相关推荐: