双方向連結リスト
以下の命令を受け付ける双方向連結リストを実装しなさい。
insertFirst x 先頭に要素の継ぎ足し
insertLast x 末尾に要素の継ぎ足し
delete x キーxを持つ最初の要素を削除
deleteFirst 先頭の要素を削除
deleteLast 末尾の要素を削除
deleteAll 全要素の削除
入力: 最初の行に命令数n、続くn行においてそれぞれ命令。
出力: 全ての命令が修了した後の連結リスト内のキーの空白区切りによる連続した出力および改行。
入力例1:
6
insertFirst 100
deleteAll
insertLast 50
insertLast 8
insertLast 20
deleteFirst
出力例1
8 20
解答は以下のソースコードになります。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int n,data[10000]; int i=0,len=0,j=0; char name[10000][10000]; char countname[10000][10000]; int countdata[10000]; int counttime=0; scanf("%d",&n); //printf("%d\n",n); for (i=0;i<n;i++){ scanf("%s %d",&name[i], &data[i]); //printf("%s %d\n",name[i], data[i]); //len++; } for (i=0;i<n;i++){ //printf("countdata=%d name=%s data=%d len=%d\n",countdata[i],name[i],data[i],len); if (strcmp(name[i],"insertFirst")==0){ insertFirst(countdata, data[i], &len); }else if (strcmp(name[i],"insertLast")==0){ insertLast(countdata, data[i], &len); }else if (strcmp(name[i],"delete")==0){ deleteX(data, data[i], &len); }else if (strcmp(name[i],"deleteFirst")==0){ deleteFirst(countdata, &len); }else if (strcmp(name[i],"deleteLast")==0){ deleteLast(countdata, &len); }else if (strcmp(name[i],"ddeleteAll")==0){ deleteAll(countdata, &len); }else { printf("error\n"); } } for (j=0;j<len;j++){ printf("%d ",countdata[j]); } return 0; } void deleteX(int data[10000],int x, int *len){ int i= 0,j=0; for (i=0;i<*len;i++){ if (data[i] == x){ printf("data=%d i=%d",data[i],i); for (j=i;j<*len;j++){ data[i] = data[i+1]; } (*len)--; break; } } return; } void deleteFirst(int data[10000], int *len){ int i=0; for (i=0;i<*len;i++){ data[i] = data[i+1]; } (*len)--; return; } void deleteLast(int data[10000], int *len){ data[*len-1] = 0; (*len)--; return; } void insertFirst(int data[10000],int num, int *len){ int i=0; for (i=*len-1;i>=0;i--){ data[i+1] = data[i]; } data[0] = num; (*len)++; return; } void insertLast(int data[10000],int num, int *len){ data[*len] = num; (*len)++; return; } void deleteAll(int data[10000], int *len){ int i=0; for (i=0;i<*len;i++){ data[i] = 0; } len = 0; return; }