周一周二把栈,队列,链表看了半天,今天想办法写了两个题目(链表还在学)
ps:每组数据后有一个空行。(难怪交7次都是格式错误)
借鉴了别人的博客,结果找不到网址了
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<time.h> typedef struct asw{ int a[101]; int op; int ed; }asd; void start(asd *q){ q->op=0;q->ed=0; } void add(asd *q,int e){ q->a[q->ed++]=e; } void insallhead(asd *q){ if(q->op==q->ed)printf("this is empty!\n"); else printf("%d\n",q->a[q->op++]); } void stop(asd *q){ while(q->op!=q->ed)printf("%d\n",q->a[q->op++]); } int main() { asd *q=(asd*)malloc(sizeof(asd)); int t; while(scanf("%d",&t)!=EOF){ start(q); while(t--){ char x[15]; int e; getchar(); scanf("%s",x); if(strcmp(x, "enqueue") == 0) { scanf("%d", &e); add(q, e); } if(strcmp(x, "dequeue") == 0) { insallhead(q); } if(strcmp(x, "query") == 0) { if(q->op == q->ed) printf("this is empty!\n"); else stop(q); } } printf("\n");//每组数据后跟一个空行,吐了 } return 0; }
ps:只要出现一次空栈后pop就在数据结束后输出error,有且仅输出一次
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<malloc.h> int dl1=0,z1=0; typedef struct asw{ int num[1001]; int op,ed; }duilie;//队列:dl typedef struct asd{ int num[1001]; int tipid; }zhan;//栈:z void opendl(duilie *dl){//初始化 dl->op=dl->ed=0; } void openz(zhan *z){ z->tipid=0; } void adddl(duilie *dl,int e){//push dl->num[dl->ed++]=e; } void addz(zhan *z,int e){ z->num[z->tipid++]=e; } void zyydl(duilie *dl){//pop if(dl->op>=dl->ed)dl1=1; else if(dl->op<dl->ed)dl->op++; } void zyyz(zhan *z){//最后输出 if(z->tipid<=0)z1=1; else if(z->tipid>0)z->tipid--; } void putsdl(duilie *dl){ if(dl1==1)printf("error\n"); else{ for(int i=dl->op;i<dl->ed;i++)printf("%d ",dl->num[i]); printf("\n"); } } void putsz(zhan *z){ if(z1==1)printf("error\n"); else { for(int i=0;i<z->tipid;i++)printf("%d ",z->num[i]); printf("\n"); } } int main(){ int m; scanf("%d",&m); for(int ii=0;ii<m;ii++){ int n; dl1=0;z1=0; scanf("%d",&n); duilie *dl=(duilie*)malloc(sizeof(duilie)); zhan *z=(zhan*)malloc(sizeof(duilie)); opendl(dl);openz(z); for(int i=0;i<n;i++){ getchar(); char xx[100]; scanf("%s",xx); if(strcmp(xx,"push")==0){ int e; scanf("%d",&e); adddl(dl,e); addz(z,e); } else if(strcmp(xx,"pop")==0){ zyydl(dl);zyyz(z); } } putsdl(dl);putsz(z); } return 0; }
(我怎么用的都是结构体数组?)