数据结构实验指导书-线性表的操作
实验1线性表的基本操作
一、实验目的
(1)掌握线性表的逻辑特征;
(2)掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算;(3)熟练掌握线性表的链式存储结构定义及基本操作;(4)理解循环链表和双链表的特点和基本运算;
(5)加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力;二、实验内容
1、创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表的初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表。
要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:
(1)从键盘上依次输入21、18、30、75、42、56,创建顺序表,并输出顺序表中的各元素值。
(2)分别在单链表的第3个位置插入67,给出插入成功或失败的信息,并输出此时顺序表中的各元素值。
(3)删除顺序表中的第6个数据元素,给出删除成功或失败的信息,并输出此时顺序表中的各元素值。
(4)查顺序表中是否有75这个元素,如果有返回该元素在顺序表中的位序。
2、创建有若干个元素(可以是整型数值)的单链表,实现对单链表的初始化,对已建立的顺序表插入操作、删除操作、查操作、遍历输出单链表表。要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:
(1)从键盘上依次输入21、18、30、75、42、56,创建单链表,并输出单链表中的各元素值。
(2)分别在单链表的第4个位置,给出插入成功或失败的信息,并输出单链表中的各元素值。
(3)删除单链表中的第2个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
(4)查顺序表中的第五个元素并输出该元素的值。三、参考代码(1)顺序表的操作
#include#include
#defineTRUE1#defineFALSE0#defineOK1#defineERROR0
#defineOVERFLOW-2typedefintStatu;
#defineINIT_SIZE100/某初始分配空间的大小某/
#defineLISTINCREMENT10/某分配增量某/
typedefintElemType;typedeftruct{
ElemType某elem;intlength;intlitize;}SqLit;
/某ElemTypeelem[INIT_SIZE],注两者区别。存储空间的起始地址。某//某线性表中数据元素个数,即表长某//某线性表所申请的存储空间的大小某/
SqLitCreateLit_Sq(SqLitL)/某创建一个空的线性表某/{
L.elem=(ElemType某)malloc(INIT_SIZE某izeof(ElemType));if(!L.elem)e某it(ERROR);L.length=0;/某表长为0某/L.litize=INIT_SIZE;/某申请的空间为初始大小某/returnL;}代码大全书籍
StatuInertLit_Sq(SqLit某L,inti,ElemTypee)/某在线性表的第i个位置前插入元素e某/{int某newbae,某q,某p;intj;
if((i<1)||(i>L->length+1)){printf(\值不合法!\\n\if(L->length>=L->litize)/某当前空间已满,增加分配空间某/{
newbae=(ElemType
某)realloc(L->elem,(L->litize+LISTINCREMENT)某izeof(ElemType));if(!newbae)e某it(ERROR);L->elem=newbae;
L->litize=L->litize+LISTINCREMENT;}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)某(p+1)=某p;某q=e;
L->length++;}
SqLitDeleteLit_Sq(SqLit某L,inti,ElemType某e)/某删除线性表中的第i个元素,并获得所删元素的值某/{intj;
if((i<1)||(i>L->length)){printf(\值不合法!\\n\某e=L->elem[i-1];
for(j=i;j<=L->length;j++)
L->elem[j-1]=L->elem[j];L->length--;}
voidPrint_Sq(SqLitL)/某遍历顺序线性表某/{inti;
printf(\for(i=0;i
if((i+1)==0)
printf(\ele
printf(\}}
intGetLength(SqLitL){
returnL.length;}
intequal(ElemTypee1,ElemTypee2)/某判两个元素是否相等某/{
if(e1==e2)return1;elereturn0;}
voidGetelem(SqLitL,inti,ElemType某e){
某e=L.elem[i-1];}
intLitEmpty(SqLitL){
if(L.length==0)return1;elereturn0;}
voidmain(){inti;
SqLitLq;ElemTypee;
Lq=CreateLit_Sq(Lq);InertLit_Sq(&Lq,1,21);InertLit_Sq(&Lq,2,18);InertLit_Sq(&Lq,3,30);InertLit_Sq(&Lq,4,75);InertLit_Sq(&Lq,5,42);InertLit_Sq(&Lq,6,56);Print_Sq(Lq);
InertLit_Sq(&Lq,3,67);Print_Sq(Lq);
DeleteLit_Sq(&Lq,6,e);Print_Sq(Lq);
if(i=LocateElem_Sq(Lq,75,equal))
printf(\ele
printf(\getch();}
(2)单链表的操作
#include#include
typedefintElemType;
/某定义结点类型某/typedeftructNode{

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。