数据结构作业汇总.docx
- 文档编号:11242470
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:24
- 大小:19.36KB
数据结构作业汇总.docx
《数据结构作业汇总.docx》由会员分享,可在线阅读,更多相关《数据结构作业汇总.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构作业汇总
//第二次作业第二题
已知一个顺序表L,其中元素递增有序排列,设计一个算法插入元素X后,保持该顺序表任递增有序排列。
#include
#include
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineINFEASIBLE-1
#defineLISTINCREMENT10
#defineLIST_INIT_SIZE100
typedefintStatus;
typedefintElemType;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
StatuscreatList(SqList&L,intn){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);
L.length=0;ElemTypetemp;
L.listsize=LIST_INIT_SIZE;
printf("输入这%d元素(可以无序程序会自行排序):
\n",n);
for(intcount=0;count scanf("%d",L.elem+count); L.length++; } //对数组中的元素进行排序,使得该数组中元素由小到大有序排列 for(inti=0;i intk=i; for(intj=i;j if(L.elem[j] if(k! =i){ temp=L.elem[k]; L.elem[k]=L.elem[i]; L.elem[i]=temp; } } returnOK; } StatusListInsert_Sq_Sequent(SqList&L,ElemTypee){ ElemType*p,*q;inti=0; if(L.length>=L.listsize){ ElemType*newbase=(ElemType*)realloc(L.elem,LISTINCREMENT*sizeof(ElemType)); if(! newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } p=L.elem; while(*p p++; i++; } if(i==L.length){L.elem[i]=e;L.length++;returnOK;} q=p; for(p=&L.elem[L.length-1];p>=q;--p) *(p+1)=*p; *q=e; L.length++; returnOK; } //显示链表元素 StatusdispList_Sq(SqList&L){ for(inti=0;i printf("%d",*(L.elem+i)); printf("\n"); returnOK; } intmain(){ SqListL;ElemTypee; intn;//表示链表中有n个元素 printf("请输入初始化元素个数: \n"); scanf("%d",&n); creatList(L,n);//创建一个含有n个元素的链表 dispList_Sq(L);//显示链表中的元素 //对于插入函数,有多组测试,当输入元素e不合法时程序运行结束。 printf("输入待插入元素(当输入不合法时结束): \n"); while(scanf("%d",&e)){ ListInsert_Sq_Sequent(L,e); dispList_Sq(L); printf("输入待插入元素(当输入不合法时结束): \n"); } return0; } //第二次作业第三题 设计一个算法删除单链表L中值为X的结点的直接前驱结点。 #include #include #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineOVERFLOW-2 #defineINFEASIBLE-1 #defineLISTINCREMENT10 #defineLIST_INIT_SIZE100 typedefintStatus; typedefintElemType; typedefstructDouble_LNode{ ElemTypedata; structDouble_LNode*prior; structDouble_LNode*next; }Double_LNode,*Dul_LinkList; StatuscreatDouble_LNode(Dul_LinkList&L,intn){ if(n<1)exit(ERROR); L=(Double_LNode*)malloc(sizeof(Double_LNode)); if(! L)exit(OVERFLOW); L->prior=NULL; Dul_LinkListp=L,q; printf("输入这%d个元素: \n",n); scanf("%d",&(p->data)); for(inti=1;i q=(Dul_LinkList)malloc(sizeof(Double_LNode)); if(! q)exit(OVERFLOW); scanf("%d",&(q->data)); p->next=q; q->prior=p; p=q; } p->next=NULL; returnOK; } StatusDouble_LNode_Delete_Elem(Dul_LinkList&L,ElemTypee){ if(! L)exit(ERROR); Dul_LinkListp; p=L; while(p){ if(p->data==e){ if(! (p->prior)){ if(! (p->next)){ L=NULL; returnOK; } p->next->prior=NULL; L=p->next; returnOK; } if(! (p->next)){ p->prior->next=NULL; returnOK; } p->next->prior=p->prior; p->prior->next=p->next; returnOK; } p=p->next; } if(! p)printf("链表中不存在该元素\n"); returnOK; } Statusdisp_Double_LNode(Dul_LinkList&L){ if(! L){ printf("链表为空\n"); exit(ERROR); } Dul_LinkListp=L; while(p){ printf("%d",p->data); p=p->next; } printf("\n"); returnOK; } intmain(){ Dul_LinkListL;intn; printf("输入元素个数: \n"); scanf("%d",&n); creatDouble_LNode(L,n); disp_Double_LNode(L); ElemTypee; //多组测试数据,当输入数据不合法时程序结束 printf("输入待检测元素(当输入不合法时结束): \n"); while(scanf("%d",&e)){ Double_LNode_Delete_Elem(L,e); disp_Double_LNode(L); printf("输入待检测元素(当输入不合法时结束): \n"); } returnOK; } //第三次作业第一题 1.假设表达式中允许包含三种括号: 圆括号,方括号和大括号。 设计一个算法采用顺序栈判断表达式中括号是否正确配对。 #include #include #defineOK1 #defineOVERFLOW-2 #defineYES1 #defineERROR-3 #defineNO0 #defineSTACK_INIT_SIZE100 typedefintStatus; typedefcharSElemType; typedefstruct{ SElemType*base; SElemType*top; intstacksize; }SqStack; StatusInitStack(SqStack&s){ s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! s.base)exit(OVERFLOW); s.top=s.base; s.stacksize=STACK_INIT_SIZE; returnOK; } StatusBrack_Paired_Judge(SElemTypes1,SElemTypes2){ if((s1==')'&&s2=='(')||(s1==']'&&s2=='[')) returnYES; returnNO; } StatusBrack_Copy(SElemType*Brack,SElemType*elem){ if(*elem=='\n')exit(ERROR); while(*elem! ='\n'){ if(*(elem)=='('||*(elem)==')'||*(elem)=='['||*(elem)==']') *(Brack++)=*elem; elem++; } *Brack='\n'; returnOK; } StatusSBrack_Paired_Judge(SElemType*elem){ if((*elem)=='\n')returnYES; SqStacks; InitStack(s); *(s.top++)=*(elem++); if((*elem)=='\n')returnNO; while(*elem! ='\n'){ *(s.top++)=*(elem++); if(*(s.base)==')'||*(s.base)==']') returnNO; if(*(s.top-1)==')'||*(s.top-1)==']'){ if(Brack_Paired_Judge(*(s.top-1),*(s.top-2))==YES) s.top=s.top-2; elsereturnNO; } } if(s.top==s.base) returnYES; returnNO; } intmain(){ printf("请输入待测试表达式: \n"); SElemTypes[100]; SElemTypebrack[100]; charflag='Y'; while(flag=='Y'){ inti=0; while((s[i++]=getchar())! ='\n'); Brack_Copy(brack,s); if(SBrack_Paired_Judge(brack)) printf("括号配对\n"); else printf("括号不配对\n"); printf("是否继续输入(Y/N): "); flag=getchar(); getchar();//用于接收换行符 } return0; } //第三次作业第二题 2.假设用一个循环单链表表示队列,并且只设一个指针rear指向队尾节点,但不设头指针,设计出相应的队初始化、入队算法。 #include #include #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineOVERFLOW-2 #defineINFEASIBLE-1 #defineLISTINCREMENT10 #defineLIST_INIT_SIZE100 typedefintStatus; typedefintQElemType; typedefstructQNode{ QElemTypedata; QNode*next; }QNode,*QueuePtr; typedefstruct{ QNode*rear; }LinkQueue; //初始化链表(需输入一个元素) StatusInitQueue(LinkQueue&Q,QElemTypee){ Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(! Q.rear)exit(OVERFLOW); Q.rear->data=e; Q.rear->next=Q.rear; returnOK; } //插入元素 StatusEnQueue(LinkQueue&Q,QElemTypee){ if(! Q.rear)exit(OVERFLOW); QueuePtrp=(QueuePtr)malloc(sizeof(QNode)); if(! p)exit(OVERFLOW); p->data=e; p->next=Q.rear->next; Q.rear->next=p; Q.rear=p; returnOK; } //显示链表 StatusdispQueue(LinkQueue&Q){ if(! Q.rear)exit(OVERFLOW); QueuePtrp=Q.rear->next; while(p! =Q.rear){ printf("%d",p->data); p=p->next; } printf("%d\n",p->data); returnOK; } intmain(){ LinkQueuequeue; QElemTypeelem; printf("请输入初始化需要的元素(一个): \n"); scanf("%d",&elem); InitQueue(queue,elem); //重复插入元素,直至输入不合法时结束 printf("继续输入元素(输入不合法时程序结束): "); while(scanf("%d",&elem)){ EnQueue(queue,elem); printf("队列元素为: \n"); dispQueue(queue); printf("继续输入元素(输入不合法时程序结束): "); } return0; } //第四次作业 #include #include #defineOK1 #defineERROR0 #defineOVERFLOW-1 #defineNULL0 #defineFALSE0 typedefintStatus; typedefcharTElemType; typedefstructBiTNode{ TElemTypedata; structBiTNode*Lchild,*Rchild,*parent; }BiTNode,*BiTree,*SElemType; typedefstruct{ SElemType*top,*base; intstacksize; }SqStack; StatusInitStack(SqStack&S){ if(! (S.base=(SElemType*)malloc(100*sizeof(SElemType))))exit(OVERFLOW); S.top=S.base; S.stacksize=100; returnOK; } StatusPush(SqStack&S,SElemTypee){ if(S.top-S.base>=S.stacksize){ S.base=(SElemType*)realloc(S.base,(S.stacksize+10)*sizeof(SElemType)); if(! S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=10; } *S.top++=e; returnOK; } StatusPop(SqStack&S,SElemType&e){ if(S.top==S.base)returnERROR; e=*--S.top; returnOK; } StatusGetTop(SqStacks,SElemType&e){ if(s.top==s.base)returnERROR; e=*(s.top-1); returnOK; } StatusStackEmpty(SqStack&S){ if(S.base==S.top)returnOK; returnFALSE; } StatusVisit(BiTree&T){ if(! T)returnFALSE; putchar(T->data); returnOK; } StatusCreateBTree(BiTree&T){ TElemTypeelem; elem=getchar(); if(elem=='')T=NULL; else{ if(! (T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW); T->data=elem; CreateBTree(T->Lchild); CreateBTree(T->Rchild); } returnOK; } StatusInOrderTraverseNum(BiTreeT,intk,TElemType&e){ SqStacks;inti=0; if(k<=0)exit(ERROR); InitStack(s);BiTreep=T; while(p||! (StackEmpty(s))){ if(p){Push(s,p);p=p->Lchild;} else{ Pop(s,p); i++; if(i==k){e=p->data;returnOK;} p=p->Rchild; } } exit(ERROR); } intmain(){ intk;TElemTypetd; BiTreebt; printf("请输入树中的元素\n");//先序输入元素,子树不存在则以空格表示; CreateBTree(bt); printf("输入序数: "); scanf("%d",&k); InOrderTraverseNum(bt,k,td); printf("中序遍历二叉树的第%d个元素为: ",k); putchar(td); putchar('\n'); returnOK; } //第五次作业 假设图G采用邻接表存储,设计算法实现下列要求: (1)求出图G中每个顶点的出度。 (2)判断图G中是否存在变。 #include #include #defineOK1 #defineNULL0 #defineOVERFLOW-1 #defineERROR0; #defineFALSE0 typedefintStatus; typedefcharVertexType; typedefintInfoType;//弧的信息为整型,即用来存放弧的权值; typedefstructArcNode{ intadjvex; structArcNode*nextarc; InfoTypeinfo; }ArcNode; typedefstructVNode{ VertexTypedata; ArcNode*firstarc; }VNode,AdjList[20]; typedefstruct{ AdjListvertices; intvexnum,arcnum; //intkind; }ALGraph; intLocateVex(ALGraphG,VertexTypev){ for(inti=0;i if(G.vertices[i].data==v) returni; return0; } StatusCreateG(ALGraph&G){ VertexTypev1,v2;InfoTypew=1;inta,b;//a,b分别用来存放顶点的位置 ArcNode*p,*q; cout<<"输入顶点数和弧数"< cin>>G.vexnum>>G.arcnum; cout<<"输入各个顶点名称(用单个字符表示): "< for(inti=0;i cin>>G.vertices[i].data;//输入顶点信息,每个顶点为一个字符。 G.vertices[i].firstarc=NULL; } cout<<"输入各条弧"< for(i=0;i cin>>v1>>v2;//v1,v2的顺
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 汇总