数据结构及数据库及实验报告_第1页
数据结构及数据库及实验报告_第2页
数据结构及数据库及实验报告_第3页
数据结构及数据库及实验报告_第4页
数据结构及数据库及实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z实验1ADT表的编程与实现电工二**:*德良**:6实验目的:加深对抽象数据类型ADT表的理解;实验原理:参照课本p.44-49,及Figure3.6-3.13.实验内容:编写程序实现ADT表的定义,及常用操作:1〕、判断表是否为空;源程序*include"stdaf*.h"*include"stdio.h"*include"stdlib.h"*include"malloc.h"//定义链表中的节点typedefstructnode{intmember;//节点中的元素structnode*pNe*t;//指向下一个节点的指针}Node,*pNode;//函数声明pNodeCreateList();//创立链表函数voidTraverseList(pNode);//遍历链表函数boolIs_Empty(pNode);//判断链表是否为空intmain(){pNodepHead=NULL;//定义初始化头节点structNode*pHead==NULLintflag;//存放链表是否为空的标志,intLen;pHead=CreateList();//创立一个非循环单链表,并将该链表的头结点的地址付给pHeadTraverseList(pHead);//调用遍历链表函数if(Is_Empty(pHead)==true)//判断列表是否为空{return0;}return0;}//创立链表函数pNodeCreateList(){inti;intlen;intval;pNodepHead=(pNode)malloc(sizeof(Node));pNodepTail=pHead;pTail->pNe*t=NULL;printf("请输入节点个数:");scanf("%d",&len);for(i=0;i<len;i++){printf("第%d个节点的数值:",i+1);scanf("%d",&val);pNodepNew=(pNode)malloc(sizeof(Node));pNew->member=val;pTail->pNe*t=pNew;pNew->pNe*t=NULL;pTail=pNew;}returnpHead;}//遍历链表函数voidTraverseList(pNodepHead){pNodep=pHead->pNe*t;while(NULL!=p){printf("%d",p->member);p=p->pNe*t;}printf("\n");return;}//判断链表是否为空boolIs_Empty(pNodepHead){if(NULL==pHead->pNe*t){printf("链表为空!\n");returntrue;}else{returnfalse;}}运行结果输入节点个数及各节点数值如下2〕获取第i个节点的内容源程序*include"stdaf*.h"*include"stdio.h"*include"stdlib.h"*include"malloc.h"*definema*size50typedefstruct{intdata[ma*size];intlast;}Sequenlist;Sequenlist*InitList()//创立顺序表{Sequenlist*L;L=(Sequenlist*)malloc(sizeof(Sequenlist));L->last=0;return(L);}Sequenlist*creat()//创立一个有具体内容的顺序表{Sequenlist*L;inti=1,n;L=InitList();printf("请输入数据,以0完毕\n");scanf("%d",&n);while(n!=0&&L->last<ma*size){L->data[i]=n;i=i++;L->last++;scanf("%d",&n);}return(L);}intGetData(Sequenlist*L,inti)//获取第i个元素{if(i>=1&&i<=L->last)return(L->data[i]);else{printf("参数i不合理!\n");return0;}}voidmain(){intlength,i;intvalue,number,location;intj,k;intflag;Sequenlist*L;L=creat();printf("Pleaseinputthelocation\n");scanf("%d",&location);value=GetData(L,location);printf("Thenumberis%d\n",value);}运行程序依次输入链表元素的值,以0完毕输入要查找元素的位置3〕链表删除元素源程序*include"stdaf*.h"*include"stdio.h"*include"stdlib.h"*include"malloc.h"typedefintElemType;typedefvoidStatus;typedefstructNode{ ElemTypedata; structNode*ne*t;}LNode,*LinkList;StatusCreatList(int,LinkList);StatusTraverse(LinkList);StatusFreeList(LinkList);ElemTypeDelElem(LinkList,ElemType);intmain(){ intLength; ElemTypee; LinkListL; L=(LinkList)malloc(sizeof(LNode)); L->ne*t=NULL; printf("InputtheLengthofList:\n"); scanf("%d",&Length); CreatList(Length,L); printf("TraverstheList:\n"); Traverse(L); while(1) { printf("请输入要删除的元素:\n"); scanf("%d",&e); if(DelElem(L,e))//在L中将元素e删除 { printf("删除%d后:\n",e);break; } printf("未找到该元素,删除失败\n"); } Traverse(L); FreeList(L); printf("ListreleaseSuccess!\n"); return0;}StatusCreatList(intLength,LinkListL){ inti; LinkListBody=NULL,p=L; for(i=0;i<Length;i++) { Body=(LinkList)malloc(sizeof(LNode)); p->ne*t=Body; printf("Inputthe%dthnum:\n",i+1); scanf("%d",&(Body->data)); p=Body; } Body->ne*t=NULL;}StatusFreeList(LinkListL){ LinkListtemp=NULL,p=L; while(p) { temp=p->ne*t; free(p); p=temp; }}StatusTraverse(LinkListL){ LinkListp=L; p=p->ne*t; while(p)//while(p!=NULL) { printf("%d",p->data); p=p->ne*t; } printf("\n");}ElemTypeDelElem(LinkListL,ElemTypee){LinkListp,q; q=p=L; p=p->ne*t;//p指向头结点后第一个元素 while(p) { if(p->data==e) { q->ne*t=p->ne*t; free(p); return1; } else { q=p;//q始终指向p上一个结点p=p->ne*t; } } //没有执行上个return,说明没找到 return0;}运行结果:输入节点个数依次输入各个节点的数值输入要删除的元素4〕链表插入元素。源程序*include"stdaf*.h"*include"stdio.h"*include"stdlib.h"*include"malloc.h"*defineN5typedefintelemtype;typedefstructnode{elemtypedata;structnode*ne*t;}linklist;linklist*Creatlist(linklist*L){L=(linklist*)malloc(sizeof(linklist));L->ne*t=NULL;returnL;}intJudge(linklist*L){if(L->ne*t==NULL){printf("建表成功...\n");}elseprintf("建表失败.\n");return0;}intInput(linklist*L,int*,linklist*r){inti;linklist*p;p=(linklist*)malloc(sizeof(linklist));p->data=*;p->ne*t=NULL;r->ne*t=p;printf("%d",p->data);return0;}intInsert1(linklist*L,inti){linklist*p,*q,*r,*t;intj=1,item;p=L->ne*t;q=L;r=L;if(L->ne*t==NULL){printf("表空.\n");return0;}else{while(p!=NULL&&j<i){q=p;p=p->ne*t;j++;}if(p==NULL){printf("%d不在表的*围内.\n");return0;}else{t=(linklist*)malloc(sizeof(linklist));t->ne*t=NULL;printf("请输入item:");scanf("%d",&item);t->data=item;t->ne*t=p;q->ne*t=t;}printf("在第%d位上插入值为%d的节点后的所有数据为\n",i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论