收藏 分享(赏)

数据结构实验二试验报告 线性表的基本操作.doc

上传人:tangtianxu1 文档编号:3121792 上传时间:2018-10-04 格式:DOC 页数:17 大小:238KB
下载 相关 举报
数据结构实验二试验报告 线性表的基本操作.doc_第1页
第1页 / 共17页
数据结构实验二试验报告 线性表的基本操作.doc_第2页
第2页 / 共17页
数据结构实验二试验报告 线性表的基本操作.doc_第3页
第3页 / 共17页
数据结构实验二试验报告 线性表的基本操作.doc_第4页
第4页 / 共17页
数据结构实验二试验报告 线性表的基本操作.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、数据结构试验报告实验二线性表的基本操作实验内容:线性表两种存储结构的基本运算 专业班级:网络工程 1002 班 组 长:王星 (2010100230) 组 员:郭坤铭(2010100243) 张磊 (2010100244) 2012 年 3 月 16 日1一、 实验项目目的和要求1、 掌握线性表的特点。2、 掌握线性表的顺序存储结构和链式存储结构的基本运算。3、 尽可能考虑算法的健壮性。4、 实验报告中要写出测试数据、错误分析以及收获。二、 实验内容1.用结构体类型描述线性表的两种存储结构2.完成课堂上所讲的两种存储结构的基本运算3.要求用二级菜单实现* 1-顺序表 * 2-链 表 * 0-退

2、 出 *请输入的选择:(0-2): 线性表的链式存储# 1-前插建立链表 # 2-后插建立链表 # 3-访问第 i 个元素 # 4-插入 # 5-删除 # 6-求线性表的表长 # 0-退出 #请输入选择(0-6): 三、 实验代码#include #include /-宏定义-/#define TRUE 1#define FALSE 02#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 50#define LISTINCREMENT 10/-结构体-/typedef

3、 int Status;typedef int ElemType;typedef struct ElemType *elem;int length;int listsize;SqList;typedef struct link int data;struct link *next;link,*linklist;/-顺序表中的函数-/Status InitList_Sq(SqList *L) int i,a;L-elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); /分配空间 if(!L-elem) exit(OVERFLOW);/若存储

4、分配失败,返回 -2 L-length=0; /空表,长度为 0 L-listsize=LIST_INIT_SIZE; /初始存储容量 printf(“请输入结点数:“);scanf(“%d“, printf(“请输入数据:n“);for(i=0;ielemi);(L-length)+;3return OK;void printlist_sq(SqList L) int i;printf(“输入的元素为:“);for(i=0;ielemi-1); ElemType *newbase,*p;if (iL-length+1) return ERROR; /检查 i 值是否合理 /将线性表第 i 个

5、元素之后的所有元素向后移动 if(L-length=L-listsize)newbase=(ElemType*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW);L-elem=newbase;L-listsize+=LISTINCREMENT;q = for(p=p=q;-p)*(p+1)=*p;*q=e;+L-length;return OK;Status ListDelete_Sq(SqList *L,int i,ElemType e)4int *p,*q;if (iL

6、-length)return ERROR; p=e=*p;q=L-elem+L-length-1;for (+p;plength; return OK; Status GetElem_Sq(SqList *L,int i,ElemType *e) printf(“输入要查找元素的位置:“);scanf(“%d“,if (iL-length) return ERROR; /判断 i 值是否合理,若不合理,返回- else *e=L-elemi-1; /数组中第 i-1 的单元存储着线性表中第 i 个数据元素的内容 printf(“该位置的元素为%d“,L-elemi-1); return OK;

7、 int ListLength_Sq(SqList *L) printf(“该线性表长为:%d“,L-length);return (L-length); /-链表中的函数-/void add_top(link *top) link *p;int length,i;top-next=NULL;printf(“输入建立链表长度:“);5scanf(“%d“,printf(“请输入结点元素:“);for(i=1;idata=i;p-next=top-next;top-next=p;void arrive_end(link *top) link *p=top-next;while(p!=NULL)p

8、rintf(“%d“,p-data);p=p-next;printf(“n“);void add_bottom(link *top) link *p,*q;int length,i;q=top;printf(“输入建立链表长度:“);scanf(“%d“,printf(“请输入结点元素:“);for(i=1;idata=i;q-next=p;q=p;6q-next=NULL;int length(link *top) ink *p;int length=0;p=top;while(p-next!=NULL)p=p-next;length+;return length;void delete(l

9、ink* top,int pos) int i=0;link *p=top,*q;while(p-next!=NULLi+;q=p-next;p-next=q-next;free(q);int insert(link *top,int i,int pos)int j=0;link *p=top,*s;while (jnext;7if (p=NULL) /未找到第 i-1 个结点return 0;else /找到第 i-1 个结点*p s=(link*)malloc(sizeof(link); /创建新结点*ss-data=pos; s-next=p-next; /将*s 插入到*p 之后p-n

10、ext=s;return 1;int GetElem(link *top,int i) int j=0;link *p;p=top;while(p-nextj+;if(i=j)printf(“该位置的元素为%d“,p-data);return OK;/-主菜单和二级菜单-/int menu_select_list() int choice;printf(“*n“);printf(“* 1-顺序表 *n“);printf(“* 2-链表 *n“);printf(“* 3-退出 *n“);printf(“*n“);8printf(“请输入选择:(1-3)“);scanf(“%d“,if(choic

11、e3)printf(“输入选择有误,请重新选择(1-3):n“);return choice;int menu_select_2_sqlist()int choice;printf(“tn“);printf(“t* 1-建立顺序表 *n“);printf(“t* 2-显示 *n“);printf(“t* 3-插入 *n“);printf(“t* 4-删除 *n“);printf(“t* 5-查找 *n“);printf(“t* 6-求线性表的长度 *n“);printf(“t* 7-返回 *n“);printf(“tn“);printf(“请输入选择(1-7):“);scanf(“%d“,if

12、(choice7)printf(“输入选择有误,请重新选择(1-7):n“);return choice;int menu_select_2_list() int choice;printf(“tn“);printf(“t* 1-前插建立链表 *n“);printf(“t* 2-显示 *n“);printf(“t* 3-后插建立链表 *n“);printf(“t* 4-插入 *n“);printf(“t* 5-删除 *n“);printf(“t* 6-查找 *n“);9printf(“t* 7-求线性表的长度 *n“);printf(“t* 8-返回 *n“);printf(“tn“);pri

13、ntf(“请输入选择(1-8):“);scanf(“%d“,if(choice8)printf(“输入选择有误,请重新选择(1-8):n“);return choice;/-调用顺序表中的函数-/void main() SqList L;int i,e;link top,p;int pos;while(1)switch(menu_select_list()while(1)case 1:switch(menu_select_2_sqlist() case 1:InitList_Sq(system(“cls“);break;case 2:printlist_sq(L);getch();system

14、(“cls“);break;case 3:printf(“请输入要插入的位置:“);scanf(“%d“,printf(“请输入要插入的元素:“);scanf(“%d“,ListInsert_Sq( 10printf(“插入后的线性表:“);printlist_sq(L);getch();system(“cls“);break;case 4:printf(“请输入被删除的位置:“);scanf(“%d“,ListDelete_Sq(printf(“已成功删除!“);getch();system(“cls“);break;case 5:GetElem_Sq(getch();system(“cls

15、“);break;case 6:ListLength_Sq(getch();system(“cls“);break;case 7:return 0;break;system(“cls“);default:printf(“ttt 输入有误,请重新输入: n“);break;break;/-调用链表中的函数-/while(1) case 2:switch(menu_select_2_list()case 1:add_top(printf(“建立好的链表为:“);11arrive_end(getch();system(“cls“);break;case 2:printf(“建立好的链表为:“);ar

16、rive_end(getch();system(“cls“);break;case 3:add_bottom(arrive_end(getch();system(“cls“);break;case 4:printf(“请输入插入位置:“);scanf(“%d“,printf(“请输入要插入的元素:“);scanf(“%d“,insert(arrive_end( getch();system(“cls“); break; case 5:printf(“请输入删除位置:“);scanf(“%d“,delete(printf(“删除后的链表为:“);arrive_end(getch();system

17、(“cls“); break;case 6:printf(“请输入查找位置:“);scanf(“%d“,GetElem(getch();system(“cls“); break;case 7:pos=length(12printf(“链表长度为:%dn“,pos);getch();system(“cls“); break;case8:return 0;break;default:; break;default:;break;system(“pause“);return 0;四:实验内容截图实验主菜单:一、顺序表:1、顺序表的建立:3、顺序表的显示:134:插入操作:5、删除操作:6、查找操作:

18、7、求线性表长度:二、链表:1、前插建立链表:142、显示链表:3、前插链表插入操作:4、前插链表删除操作:5、前插链表查找操作:6、求链表长度:7、后插建立链表的建立:158、后插链表的显示:9、后插链表的插入操作:10、后插链表的删除操作:11、后插链表的查找操作:12、后插链表的长度:五、实验项目分工王星:定义链表中的函数和调用链表函数。郭坤铭:定义顺序表中的函数和调用顺序表函数。张磊:进行宏定义和结构体的定义;设计编写主菜单和二级菜单。16六、实验总结我组将本次实验实验分成了三大部分,三个人分别负责一部分,由于初次接触数据结构实验,对于实验所用知识不够了解和编写不熟悉,经过三人的商讨和书本知识的巩固学习,慢慢的将实验的每一部分编写了出来,在此过程中遇到许多疑惑和困难,经过不断研究和摸索调试,实验项目最终得以完成。因此,在今后的学习中应认真学习课本知识,不断强化已学内容,要练习,熟悉算法,逐步提高编程能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 农林牧渔

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报