网址:
这道题写的有点恼火,题本身其实非常简单,但是最后因为输出格式的原因交了两三次,因为每个要删除的节点并没有实际删除。
如果用单链表的话就不会出现这种情况。
#include#include struct node{ char data[50]; int num; int vis;}title[100];int main(){ int n,i; scanf("%d",&n); int sum; for(i = 0; i < n; i++) { char str[10]; sum = 0; int x = 1000; while(1) { scanf("%s",str); if(!strcmp(str,"End")) break; if(!strcmp(str,"Add")) { scanf("%s",str); strcpy(title[sum].data,str); title[sum].num = x; //初始化都为1 title[sum].vis = 1; x++; sum++; } if(!strcmp(str,"Delete")) { scanf("%s",str); int j; for(j = 0; j < sum; j++) if(!strcmp(str,title[j].data)) //并没有真正删除 只是将删除的数标记为0 title[j].vis = 0; } } int k; //先找见第一个没有删除的元素 单独输出 for(k = 0; k < sum; k++) { if(title[k].vis == 1) { printf("%d",title[k].num); break; } } for(k = k + 1; k < sum; k++) { if(title[k].vis == 1) { printf(" %d",title[k].num); } } printf("\n"); for(k = 0; k < sum; k++) { if(title[k].vis == 1) { printf("%s",title[k].data); break; } } for(k = k + 1; k < sum; k++) { if(title[k].vis == 1) { printf(" %s",title[k].data); } } printf("\n"); } return 0;}