C测验考试一.docx
- 文档编号:23207470
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:49
- 大小:86.68KB
C测验考试一.docx
《C测验考试一.docx》由会员分享,可在线阅读,更多相关《C测验考试一.docx(49页珍藏版)》请在冰豆网上搜索。
C测验考试一
实验一线性表的实验
一、实验目的
1、掌握用VisualC++6.0上机调试顺序表的基本方法
2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现
3、掌握用VisualC++6.0上机调试单链表的基本方法
4、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现
5、进一步掌握循环单链表和双链表的插入、删除、查找算法的实现
二、实验内容
下面是顺序表的部分基本操作实现的算法,请同学们自己设计主函数和部分算法,调用这些算法,完成下面的实验任务。
1、顺序表基本操作的实现。
要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。
#include"iostream"
#include"string"
usingnamespacestd;
/*常用的符号常量定义*/
#defineOK1
#defineERROR0
#defineMAXSIZE10
#defineLIST_INIT_SIZE10
#defineLISTINCREMENT10
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineSUCCESS1
#defineUNSUCCESS0
#defineDUPLICATE-1
#defineNULLKEY0//0为无记录标志
#defineN10//数据元素个数
#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
#defineLQ(a,b)((a)<=(b))
/*定义ElemType为int或别的自定义类型*/
typedefintElemType;
/*顺序存储类型*/
typedefstruct
{int*elem;
intlength;
intlistsize;
}SqList;
/*构造一个空线性表算法*/
intInitList_Sq(SqList&L)//InitList_Sq()function
{//InititialaSq_List
L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!
L.elem)return(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return
(1);
}//endofInitList_Sq()function
/*从顺序表中查找与给定元素值相同的元素在顺序表中的位置*/
intLocateElem_Sq(SqListL,ElemTypee)//LocateElem_Sq()sub-function
{inti=1;
int*p=L.elem;
while(i<=L.length&&*p++!
=e)
++i;
if(i<=L.length)
return(i);
else
return(ERROR);
}//LocateElem_Sq()end
/*向顺序表中插入元素*/
intListInsert_sq(SqList&L,inti,inte)//ListInsert_sq()
{if(i<1||i>L.length+1)//i(location)isillegal
{cout<<"Initialfailure!
"< getchar(); return(ERROR); } if(L.length>=L.listsize)//insertintotheendoftheSqlist {int*Newbase; Newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(! Newbase) {cout<<"Overflow! "< getchar(); return(ERROR); } L.elem=Newbase; L.listsize+=LISTINCREMENT; } int*p,*q; q=&(L.elem[i-1]);//qpointattheelementbeforetheinsertedone for(p=&(L.elem[L.length-1]);p>=q;--p)//movetheelement *(p+1)=*p; *q=e; ++L.length; return(OK); }//ListInser_sq()end /*从顺序表中删除元素*/ voidListDelete_Sq(SqList&L,inti,int&e)//ListDelete_Sq()function { int*p,*q; if((i<1)||(i>L.length)) {cout< "< exit(0); } p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; cout<<"SuccesstoDeleteSq_list! "< }//endofListDelete_Sq()function /*有序顺序表的合并*/ intMerge_Sq(SqList&A,SqList&B,SqList&C)//Merge_Sq()function {//MergetheSqListAandBtoC C.listsize=C.length=A.length+B.length; C.elem=(ElemType*)malloc(C.listsize*sizeof(ElemType)); if(! C.elem) {cout<<"OverFlow! "< return(0); }; inti=0,j=0;//iandjistheSubscriptofA.elem[]andB.elem[] intk=0;//kistheSubscriptofC.elem[] while((i if(A.elem[i]<=B.elem[j]) {C.elem[k]=A.elem[i]; i++;k++; }//endofif else {C.elem[k]=B.elem[j]; j++;k++; }//endofelse while(i {C.elem[k]=A.elem[i]; i++;k++; }//endofwhile while(j {C.elem[k]=B.elem[j]; j++;k++; } cout<<"SuccesstoMergeAandB! "< return (1); }//endofMerge_Sq()function voidmain() { SqListLa; ElemTypee; inti=1,j,n; InitList_Sq(La); printf("输入顺序表长度: "); scanf("%d",&n); printf("输入元素个数: "); while(i {scanf("%d",&e);ListInsert_sq(La,i,e);i++;} for(j=0;j cout< } 运行如下: 2、已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc,lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表。 #include"iostream" #include"string" usingnamespacestd; /*常用的符号常量定义*/ #defineOK1 #defineERROR0 #defineMAXSIZE10 #defineLIST_INIT_SIZE10 #defineLISTINCREMENT10 #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineSUCCESS1 #defineUNSUCCESS0 #defineDUPLICATE-1 #defineNULLKEY0//0为无记录标志 #defineN10//数据元素个数 #defineEQ(a,b)((a)==(b)) #defineLT(a,b)((a)<(b)) #defineLQ(a,b)((a)<=(b)) /*定义ElemType为int或别的自定义类型*/ typedefintElemType; /*顺序存储类型*/ typedefstruct {int*elem; intlength; intlistsize; }SqList; /*构造一个空线性表算法*/ intInitList_Sq(SqList&L)//InitList_Sq()function {//InititialaSq_List L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(! L.elem)return(0); L.length=0; L.listsize=LIST_INIT_SIZE; return (1); }//endofInitList_Sq()function /*从顺序表中查找与给定元素值相同的元素在顺序表中的位置*/ intLocateElem_Sq(SqListL,ElemTypee)//LocateElem_Sq()sub-function {inti=1; int*p=L.elem; while(i<=L.length&&*p++! =e) ++i; if(i<=L.length) return(i); else return(ERROR); }//LocateElem_Sq()end /*向顺序表中插入元素*/ intListInsert_sq(SqList&L,inti,inte)//ListInsert_sq() {if(i<1||i>L.length+1)//i(location)isillegal {cout<<"Initialfailure! "< getchar(); return(ERROR); } if(L.length>=L.listsize)//insertintotheendoftheSqlist {int*Newbase; Newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(! Newbase) {cout<<"Overflow! "< getchar(); return(ERROR); } L.elem=Newbase; L.listsize+=LISTINCREMENT; } int*p,*q; q=&(L.elem[i-1]);//qpointattheelementbeforetheinsertedone for(p=&(L.elem[L.length-1]);p>=q;--p)//movetheelement *(p+1)=*p; *q=e; ++L.length; return(OK); }//ListInser_sq()end /*从顺序表中删除元素*/ voidListDelete_Sq(SqList&L,inti,int&e)//ListDelete_Sq()function { int*p,*q; if((i<1)||(i>L.length)) {cout< "< exit(0); } p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; cout<<"SuccesstoDeleteSq_list! "< }//endofListDelete_Sq()function /*有序顺序表的合并*/ intMerge_Sq(SqList&A,SqList&B,SqList&C)//Merge_Sq()function {//MergetheSqListAandBtoC C.listsize=C.length=A.length+B.length; C.elem=(ElemType*)malloc(C.listsize*sizeof(ElemType)); if(! C.elem) {cout<<"OverFlow! "< return(0); }; inti=0,j=0;//iandjistheSubscriptofA.elem[]andB.elem[] intk=0;//kistheSubscriptofC.elem[] while((i if(A.elem[i]<=B.elem[j]) {C.elem[k]=A.elem[i]; i++;k++; }//endofif else {C.elem[k]=B.elem[j]; j++;k++; }//endofelse while(i {C.elem[k]=A.elem[i]; i++;k++; }//endofwhile while(j {C.elem[k]=B.elem[j]; j++;k++; } cout<<"SuccesstoMergeAandB! "< return (1); }//endofMerge_Sq()function voidmain() { SqListLa,Lb,Lc; ElemTypee1[6]={3,4,5,6,8,9},e; inti; InitList_Sq(La); ListInsert_sq(La,1,e1[0]); ListInsert_sq(La,2,e1[1]); ListInsert_sq(La,3,e1[2]); InitList_Sq(Lb); ListInsert_sq(Lb,1,e1[3]); ListInsert_sq(Lb,2,e1[4]); ListInsert_sq(Lb,3,e1[5]); Merge_Sq(La,Lb,Lc); cout<<"Lc: "; for(i=0;i cout< cout< cout<<"La: "; for(i=0;i cout< cout< cout<<"Lb: "; for(i=0;i cout< } 运行如下: 5、单链表基本操作的实现。 要求生成单链表时,可以键盘上读取元素,用链式存储结构实现存储。 #include"iostream" #include"string" usingnamespacestd; #defineOK1 #defineERROR0 #defineMAXSIZE10 #defineLIST_INIT_SIZE10 #defineLISTINCREMENT10 #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineSUCCESS1 #defineUNSUCCESS0 #defineDUPLICATE-1 #defineNULLKEY0//0为无记录标志 #defineN10//数据元素个数 /*定义ElemType为int或别的自定义类型*/ typedefintElemType; /*链式存储类型*/ typedefstructLNode {ElemTypedata; structLNode*next; }LNode,*LinkList; /*单链表的取元素*/ intGetElem_L(LinkListL,inti,int&e)//GetElem_L()function {//ListheHeadPointerofLinkListwithHeadNode,whentheNo.iexist,assignthe //valuetovariableeandreturn"OK! "otherwisereturn"Error! " LNode*p; intj=1; p=L->next; while(p&&j {p=p->next;++j;} if(! p||j>i) {cout<<"TheNO."< "< getchar(); exit(0); }//endofif e=p->data; return(e); }//endofGetElem_L()function /*单链表的插入元素*/ intListInsert_L(LinkList&L,inti,inte)//ListInsert_L()sub-function {LNode*p=L; intj=0; while(p&&j {p=p->next; ++j; } if(! p||j>i-1)//outoflocation {cout<<"Errer! Thelocationisillegal! "< return(ERROR); } LNode*s; s=(LinkList)malloc(sizeof(LNode));//createnewLNode s->data=e; s->next=p->next; p->next=s; return(OK); }//ListInsert_L()end /*单链表的删除元素*/ intListDelete_L(LinkList&L,inti,int&e)//ListDelete_L()function {//DeletetheNO.ielementofLinkListandreturnbyvariablee LNode*p,*q; intj=0; p=L; while(p->next&&j {p=p->next;++j; } if(! p||j>i-1) {cout<<"TheNO."< "< getchar(); return(0); } q=p->next; p->next=q->next;//deletetheNO.iNode e=q->data; free(q); return(e); }//endofListDelete()function /*单链表的建立(头插法)*/ voidCreateList_L(LinkList&L,intn)//CreateList_L()function {//ToCreatreaLinkListLwithHeadNode inti; LNode*p; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; cout<<"PleaseinputthedataforLinkListNodes: "< for(i=n;i>0;--i) { p=(LinkList)malloc(sizeof(LNode)); cin>>p->data;//ReverseorderinputingforCreatingaLinkList p->next=L->next; L->next=p; }//endoffor if(n)cout<<"SuccesstoCreateaLinkList! "< elsecout<<"ANULLLinkListhaveb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测验 考试
![提示](https://static.bdocx.com/images/bang_tan.gif)