实验二.docx
- 文档编号:3010751
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:13
- 大小:17.34KB
实验二.docx
《实验二.docx》由会员分享,可在线阅读,更多相关《实验二.docx(13页珍藏版)》请在冰豆网上搜索。
实验二
顺序表附加题
线性表中的元素值按递增有序排列,针对顺序表编写C函数删除线性表中值介于a与b(a≤b)之间的元素。
【参考程序】
#include
#include
#include
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
typedefintStatus;
typedefcharElemType;
#defineLIST_INIT_SIZE100//线性表初始存储空间分配量
#defineLISTINCREMENT10//线性表存储空间的分配增量
typedefstruct{
ElemType*elem;//线性表存储空间基址
intlength;//当前线性表长度
intListsize;//当前分配的线性表存储空间大小
//(以sizeof(ElemType)为单位)
}SqList;
StatusInitList_Sq(SqList&L){
//构造一个空的顺序表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(0);//存储分配失败
L.length=0;//空表长度为0
L.Listsize=LIST_INIT_SIZE;//初始存储容量
returnOK;
}//InitList_Sq
StatusDestroyList_Sq(SqList&L)
{if(!
L.elem)returnERROR;
free(L.elem);
L.elem=NULL;
L.length=0;
L.Listsize=0;
returnOK;
}//DestroyList_Sq
StatusEmptyList_Sq(SqListL)
{if(L.length==0)returnTRUE;
elsereturnFALSE;
}
StatusListInsert_Sq(SqList&L,inti,ElemTypee){
//在顺序表L中第i个位置之前插入新的元素e,
//i的合法值为1≤i≤L.length+1,当i=L.length+1时
//e插在表尾
if(i<1||i>L.length+1)returnERROR;//i值不合法
if(L.length>=L.Listsize)returnERROR;//顺序表已满
for(intj=L.length-1;j>=i-1;--j)L.elem[j+1]=L.elem[j];
//插入位置及之后的元素后移一个位置
L.elem[i-1]=e;//插入e
++L.length;//表长增1*/
returnOK;
}//ListInsert_Sq
StatusDisplayList_Sq(SqListL)
{inti;
if(EmptyList_Sq(L))returnERROR;
for(i=0;i printf("%c",L.elem[i]); printf("\n"); returnOK; } //从0开始扫描线性表,用k记录下元素值在a与b之间的元素个数,//对于不满足该条件的元素,前移k个位置,最后修改线性表的长度。 voidmain() {SqListL; printf(" (1)初始化顺序表\n"); InitList_Sq(L); printf(" (2)依次插入a,b,c,d,e,f,g,h,i,j元素\n"); ListInsert_Sq(L,1,'a'); ListInsert_Sq(L,2,'b'); ListInsert_Sq(L,3,'c'); ListInsert_Sq(L,4,'d'); ListInsert_Sq(L,5,'e'); ListInsert_Sq(L,6,'f'); ListInsert_Sq(L,7,'g'); ListInsert_Sq(L,8,'h'); ListInsert_Sq(L,9,'i'); ListInsert_Sq(L,10,'j'); printf("(3)输出顺序表: "); DisplayList_Sq(L); printf("(4)删除顺序表中介于两个元素之间的元素后,"); //例如: delab(L,'c','f'); printf("输出顺序表: "); DisplayList_Sq(L); printf("(5)释放顺序表\n"); DestroyList_Sq(L); } 实验二 链表 实验: 单链表的各种基本运算 【实验内容与要求】 编写一个程序,实现单链表的各种基本运算,并在此基础上完成以下功能: 1)初始化单链表; 2)依次插入a,b,c,d,e元素; 3)输出单链表L; 4)输出单链表L的长度; 5)判断单链表L是否为空; 6)输出单链表L的第三个元素; 7)输出元素a的位置; 8)在第4个元素位置上插入f元素; 9)输出单链表L; 10)删除L的第3个元素; 11)输出单链表L; 12)释放单链表。 【实现提示】 为了便于实现各种运算,通常在单链表的第一个结点前增设一个附加结点,称为头结点,它的结构与表结点相同,其数据域可不存储信息,也可存储表长等附加信息。 单链表的结点结构除数据域外,还含有一个指针域。 用C语言描述结点结构如下: typedefintelemtype; typedefstructLnode {elemtypedata;//数据域 structnode*next;//指针域 }Lnode,*Linklist; 【参考程序】 #include #include #include #defineOK1 #defineERROR0 #defineTRUE1 #defineFALSE0 typedefintStatus; typedefcharElemType; typedefstructLNode{ ElemTypedata; structLNode*next; }LNode,*LinkList; StatusInitList_L(LinkList&L){//单链表初始化 L=(LinkList)malloc(sizeof(LNode)); if(! L)exit(0); L->next=NULL; returnOK; }//InitList_L StatusDestroyList_L(LinkList&L)//销毁单链表 {LinkListp,q; p=L; q=p->next; while(q! =NULL) {free(p); p=q; q=p->next; } free(p); returnOK; } StatusEmptyList_L(LinkListL)//判空 {if(L->next==NULL)returnOK; returnERROR; } intLengthList_L(LinkListL)//求单链表长度 {LinkListp=L; inti=0; while(p->next! =NULL) {i++; p=p->next; } returni; } StatusDisplayList_L(LinkListL)//打印单链表中各结点的值 {LinkListp=L->next; while(p! =NULL) {printf("%c",p->data); p=p->next; } printf("\n"); returnOK; } StatusListInsert_L(LinkList&L,inti,ElemTypee){//在单链表第i个结点前插入e //此处加入代码 }//ListInsert_L StatusListDelete_L(LinkList&L,inti,ElemType&e){//删除单链表的第i个元素 //此处加入代码 }//ListDelete_L StatusGetElemList_L(LinkListL,inti,ElemType&e){//得到单链表第i个元素的值 intj=0; LinkListp=L; while(j {++j; p=p->next; } if(! p||j>i)returnERROR; e=p->data; returnOK; } intLocateElemList_L(LinkListL,ElemTypee)//定位单链表中元素e所在的位置 {inti=0; LinkListp=L; while(p! =NULL&&p->data! =e) {++i; p=p->next; } if(p==NULL)return0; elsereturni; } voidmain() {LinkListL; ElemTypee; printf(" (1)初始化单链表\n"); InitList_L(L); printf(" (2)依次插入a,b,c,d,e元素\n"); ListInsert_L(L,1,'a'); ListInsert_L(L,2,'b'); ListInsert_L(L,3,'c'); ListInsert_L(L,4,'d'); ListInsert_L(L,5,'e'); printf("(3)输出单链表: "); DisplayList_L(L); printf("(4)单链表的长度=%d\n",LengthList_L(L)); printf("(5)单链表为%s\n",(EmptyList_L(L)? "空": "非空")); GetElemList_L(L,3,e); printf("(6)单链表的第三个元素是%c\n",e); printf("(7)元素a的位置=%d\n",LocateElemList_L(L,'a')); printf("(8)在第四个元素插入元素f\n"); ListInsert_L(L,4,'f'); printf("(9)输出单链表: "); DisplayList_L(L); printf("(10)删除第三个元素\n"); ListDelete_L(L,3,e); printf("(11)输出单链表: "); DisplayList_L(L); printf("(12)释放单链表\n"); DestroyList_L(L); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验