数据结构.docx
- 文档编号:27843255
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:75
- 大小:26.15KB
数据结构.docx
《数据结构.docx》由会员分享,可在线阅读,更多相关《数据结构.docx(75页珍藏版)》请在冰豆网上搜索。
数据结构
一、线性表及其应用
1214,1215,1216,2803,2975,2958,2959,2951,2952
1214:
#include
usingnamespacestd;
typedefstructnode
{
intdata;
structnode*next;
}LNode;
typedefstruct
{
LNode*head;}LinkList;
voidInit_link(LinkList&L)
{
L.head=newLNode;
L.head->next=NULL;
}
voidinsert_link(LinkList&L,inti,intx)
{
intj=0;
LNode*p=L.head;
while(j { p=p->next; j++; } if(j! =i-1||! p)return; LNode*q=newLNode; q->data=x; q->next=p->next; p->next=q; } voiddelete_link(LinkList&L,inti) { intj=0; LNode*p=L.head; while(j { p=p->next; j++; } if(j! =i-1||! p->next)return; LNode*q=p->next; cout< p->next=q->next; deleteq; } voidgetallelem(LinkListL) { LNode*p=L.head->next; while(p) { cout< p=p->next; } cout< } voidgetelem(LinkListL,inti) { intj=0; LNode*p=L.head; while(j { p=p->next; j++; } if(j! =i)return; cout< } voidupdate(LinkListL,inti,intx) { intj=0; LNode*p=L.head; while(j { p=p->next; j++; } if(j! =i)return; p->data=x; } intmain() { charword[12]; intloc,x; inti,n; LinkListL; Init_link(L); cin>>word; while(strcmp(word,"exit")! =0) { if(strcmp(word,"insert")==0) { cin>>n; for(i=1;i<=n;i++) { cin>>loc>>x; insert_link(L,loc,x); } } if(strcmp(word,"delete")==0) { cin>>loc; delete_link(L,loc); } if(strcmp(word,"clear")==0) { L.head->next=NULL; } if(strcmp(word,"getelem")==0) { cin>>loc; getelem(L,loc); } if(strcmp(word,"update")==0) { cin>>loc>>x; update(L,loc,x); } if(strcmp(word,"getallelem")==0) { getallelem(L); } cin>>word; } return0; } 1215: #include usingnamespacestd; classNode { private: intdata; Node*next; public: Node(intitem,Node*ptrnext=NULL): data(item),next(ptrnext){} voidInsertAfter(Node*p); Node*&NextNode(){returnnext;} int&OutPut(){returndata;} }; voidNode: : InsertAfter(Node*p) { p->next=next; next=p; } intmain() { intt,cases; cin>>cases; for(t=0;t { inti,n1,n2,num; Node*head1=NULL,*head2=NULL,*newNode=NULL,*p=NULL,*rear1=NULL; cin>>n1; for(i=0;i { cin>>num; newNode=newNode(num); if(head1==NULL) { head1=newNode; p=head1; rear1=p; } else { p->InsertAfter(newNode); p=p->NextNode(); rear1=p; } } cin>>n2; for(i=0;i { cin>>num; newNode=newNode(num); if(head2==NULL) { head2=newNode; p=head2; } else { p->InsertAfter(newNode); p=p->NextNode(); } } Node*temp1=NULL,*temp2=NULL; temp2=head2; while(temp2! =NULL) { p=temp2->NextNode(); if(temp2->OutPut()<=head1->OutPut())//表头 { temp2->NextNode()=head1; head1=temp2; } elseif(temp2->OutPut()>=rear1->OutPut())//表尾 { rear1->InsertAfter(temp2); rear1=temp2; } else//中间 { temp1=head1; while(temp1->OutPut() =NULL) temp1=temp1->NextNode(); Node*pre=head1; while(pre->NextNode()! =temp1) pre=pre->NextNode(); pre->InsertAfter(temp2); } temp2=p; } cout< temp1=head1; while(temp1->NextNode()! =NULL) { cout< temp1=temp1->NextNode(); } cout< } return0; } 1216: #include #include usingnamespacestd; classNode { private: doublea; intexp; Node*next; public: Node(doublenum,intitem,Node*ptrnext=NULL): a(num),exp(item),next(ptrnext){} voidInsertAfter(Node*p); Node*&NextNode(){returnnext;} voidPrint(); voidSet(doublenum){a=num;} doubleGetNum(){returna;} intGetExp(){returnexp;} };voidNode: : InsertAfter(Node*p) { p->next=next; next=p; } voidNode: : Print() { printf("%.2lf%d\n",a,exp); } intmain() { intt,cases; cin>>cases; for(t=0;t { if(t! =0) cout< Node*head1=NULL,*head2=NULL,*newNode=NULL,*p=NULL,*rear1=NULL; inti,m,n,exp; doublenum; cin>>m; for(i=0;i { cin>>num>>exp; newNode=newNode(num,exp); if(head1==NULL) { head1=newNode; rear1=head1; } elseif(exp { newNode->NextNode()=head1; head1=newNode; } elseif(exp>rear1->GetExp()) { rear1->InsertAfter(newNode); rear1=newNode; } else { p=head1; while(p->GetExp() =NULL) p=p->NextNode(); Node*pre=head1; while(pre->NextNode()! =p) pre=pre->NextNode(); pre->InsertAfter(newNode); } } cin>>n; for(i=0;i { cin>>num>>exp; newNode=newNode(num,exp); if(head2==NULL) { head2=newNode; p=head2; } else { p->InsertAfter(newNode); p=p->NextNode(); } } Node*temp1=head1,*temp2=head2,*temp=NULL; while(temp2) { p=temp2->NextNode(); if(temp2->GetExp()<=head1->GetExp()) { if(temp2->GetExp()==head1->GetExp()) head1->Set(head1->GetNum()+temp2->GetNum()); else { temp2->NextNode()=head1; head1=temp2; } } elseif(temp2->GetExp()>=rear1->GetExp()) { if(temp2->GetExp()==rear1->GetExp()) rear1->Set(rear1->GetNum()+temp2->GetNum()); else { rear1->InsertAfter(temp2); rear1=temp2; } } else { temp=head1; while(temp->GetExp() =NULL) { temp=temp->NextNode(); } if(temp->GetExp()==temp2->GetExp()) temp->Set(temp->GetNum()+temp2->GetNum()); else { Node*pre=head1; while(pre->NextNode()! =temp) pre=pre->NextNode(); pre->InsertAfter(temp2); } } temp2=p; } p=head1; while(p) { if(p->GetNum()! =0) { p->Print(); } p=p->NextNode(); } } return0; } 2957: #include usingnamespacestd; classNode { private: intdata; Node*next; public: Node(constint&item,Node*ptrnext=NULL): data(item),next(ptrnext){} voidInsertAfter(Node*p);//insertthenodepafterthecurrentnode Node*DeleteAfter();//deletethenodeafterthecurrentnode voidPrint(){cout< Node*NextNode(){returnnext;}; }; voidNode: : InsertAfter(Node*p) { p->next=next; next=p; } Node*Node: : DeleteAfter() { if(next==NULL) returnNULL; Node*tempptr=next; next=tempptr->next; returntempptr; } intmain() { inti,k,n,num; while(cin>>k>>n) { Node*head=NULL; Node*p=NULL,*q=NULL; for(i=0;i { cin>>num; p=newNode(num); if(head==NULL) { q=p; head=q; } else { q->InsertAfter(p); q=q->NextNode(); } } Node*p1=head,*p2=head; Node*temp; if(k { for(i=0;i p2=p2->NextNode(); while(p2->NextNode()! =NULL) { p1=p1->NextNode(); p2=p2->NextNode(); } p1->DeleteAfter(); } else { temp=head; head=head->NextNode(); deletetemp; } temp=head;//k=n=1. if(temp! =NULL) { while(temp->NextNode()! =NULL) { temp->Print(); cout<<""; temp=temp->NextNode(); } temp->Print(); cout< } elsecout< } return0; } 2958: #include usingnamespacestd; intmain() { intt; intn; intmi; intma; intflag; int*a=new int[1000000]; cin>>t; for(inti=0;i { cin>>n>>mi>>ma; for(intj=0;j { cin>>*(a+j); } if(mi>ma) { for(intj=0;j { cout<<*(a+j)<<''; } cout<<*(a+n-1)< continue; } flag=false; for(intj=0;j { if(*(a+j) { if(flag)cout<<''; flag=true; cout<<*(a+j); } } cout< } } 2951: #include intmain() { intn,m,i,j,a[10000],b,c; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&m); for(j=0;j scanf("%d",&a[j]); scanf("%d%d",&b,&c); if(c==1) {printf("%d",b); for(j=0;j printf("%d",a[j]); printf("\n");} else {for(j=0;j printf("%d",a[j]); printf("%d",b); for(j=c-1;j printf("%d",a[j]); printf("\n");} } return0; } 2952: #include intmain() { inth,i,j,a[10000],m,x,k,b[10000]; scanf("%d",&h); for(i=0;i {k=0; scanf("%d",&m); for(j=0;j scanf("%d",&a[j]); scanf("%d",&x); for(j=0;j if(a[j]! =x) b[k++]=a[j]; for(k=0;k printf("%d",b[k]); printf("%d\n",b[m-2]); } } 2959: #include #include #defineLENsizeof(structNumber) #defineNULL0 structNumber { charn; structNumber*next; }; structNumber*creat(intn) { structNumber*q,*p; charx,ch; p=q=(structNumber*)malloc(LEN); ch=getchar(); while(n>1) { scanf("%c",&x); p->n=x; p->next=(structNumber*)malloc(LEN); p=p->next; n--; } scanf("%c",&x); p->n=x; p->next=NULL; returnq; } intmain() { structNumber*La,*Lb,*p1,*p2; intt,n,sum; scanf("%d",&t); while(t--) { sum=0; scanf("%d",&n); La=creat(n); Lb=creat(n); p1=La;p2=Lb; while(p1) { if(p1->n==p2->n) sum++; p1=p1->next; p2=p2->next; } printf("%d\n",sum); } return0; } 二、栈和队列及其应用 1010,1218,1219,1282,1386,1519,2212,2778,3150,3210 1010: //SourceCode #include #include usingnamespacestd; intnum[1000],n; boolsolve() { stack inti,j=0,k; for(i=1;i<=n;i++) { if(num[j]==i) { j++; while(! s.empty()) { k=s.top();s.pop(); if(k==num[j])j++; else { s.push(k); break; } } } else s.push(i);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构