资源描述:
《信息与计算科学专业数据结构实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告学院:理学院专业年级:信息与计算科学姓名:王然学号:2009112040127实验一:顺序表一、实验目的掌握顺序表的建立,插入,删除操作。二、实验内容(C语言源程序代码、运行结果)C语言源程序代码:#include#include#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefstruct{int*elem;intlength;intlistsize;}Sqlist;intInitList_Sq(Sqlist&aL){//算法2.3//构造一个空的线性表L。aL.e
2、lem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!aL.elem)return0;//存储分配失败aL.length=0;//空表长度为0aL.listsize=LIST_INIT_SIZE;//初始存储容量return1;}intListInsert_Sq(Sqlist&aL,inti,inte){//算法2.4//在顺序线性表L的第i个元素之前插入新的元素e,//i的合法值为1≤i≤ListLength_Sq(L)+1int*p,*q;if(i<1
3、
4、i>aL.length+1)return0;//i值不合法if(a
5、L.length>=aL.listsize){//当前存储空间已满,增加容量int*newbase=(int*)realloc(aL.elem,(aL.listsize+LISTINCREMENT)*sizeof(int));if(!newbase)return0;//存储分配失败aL.elem=newbase;//新基址aL.listsize+=LISTINCREMENT;//增加存储容量}q=&(aL.elem[i-1]);//q为插入位置for(p=&(aL.elem[aL.length-1]);p>=q;--p)*(p+1)=*p;//插入位置及之后的元素右移
6、*q=e;//插入e++aL.length;//表长增1return1;}//ListInsert_Sqvoidmain(){intx;Sqlistal;x=InitList_Sq(al);x=ListInsert_Sq(al,1,2);x=ListInsert_Sq(al,2,6);printf("%d",al.elem[0]);}3.运行结果:实验二:链表实验目的掌握链表的建立,插入,删除操作。实验内容(C语言源程序代码、运行结果)C语言源程序代码:#include#includetypedefstructLNODE{in
7、tdata;structLNODE*next;}LNODE,*LinkList;voidCreateList_L(LinkList&L,intn){//算法2.11//逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表LLinkListp;inti;L=(LinkList)malloc(sizeof(LNODE));L->next=NULL;//先建立一个带头结点的单链表for(i=n;i>0;--i){p=(LinkList)malloc(sizeof(LNODE));//生成新结点p->data=int(0.1*rand());//改为一个随机生成的数
8、字(200以内)p->next=L->next;L->next=p;//插入到表头}}//CreateList_LintListInsert_L(LinkList&L,inti,inte){//算法2.9//在带头结点的单链线性表L的第i个元素之前插入元素eLinkListp,s;p=L;intj=0;while(p&&jnext;++j;}if(!p
9、
10、j>i-1)return0;//i小于1或者大于表长s=(LinkList)malloc(sizeof(LNODE));//生成新结点s->data=e;s->next=p
11、->next;//插入L中p->next=s;return1;}//LinstInsert_LintListDelete_L(LinkList&L,inti,inte){//算法2.10LinkListp,q;p=L;intj=0;while(p->next&&jnext;++j;}if(!(p->next)
12、
13、j>i-1)return0;//删除位置不合理q=p->next;p->next=q->next;//删除并释放结点e=q->data;free(q);return1;}//ListD