fork download
  1. /* dlist.c データ構造(双方向リスト):整列入力(ダミーノード2つ) */
  2. /*問題
  3. ・双方向リスト(重連結リスト)
  4. これまでのリストでは、自ノードの次のノードのデータには簡単にリストをたどることができるが、
  5. 自ノードの前のノードをたどることは容易ではない。そこで、次ノードへの
  6. ポインタの他に前ノードへのポインタをもノード内に設定することによって
  7. これを用意にするリスト構造がある。ポインタが2つの方向性を持つことから、双方向リストと呼ばれる。
  8. 以下にダミーノードを2つ持つ双方向リストのプログラムを紹介する。
  9.  
  10. void display(void)の部分を埋めて動作を可能にせよ。
  11. */
  12. #include<stdio.h>
  13. #include<stdlib.h>
  14. #define Nmax -10000.0
  15. #define Pmax +10000.0
  16.  
  17. struct dlist{
  18. float element;
  19. struct dlist *pred;
  20. struct dlist *next;
  21. };
  22.  
  23. struct dlist *head;
  24. sturct dlist *tail;
  25. struct dlist *newdlist(void)
  26. {
  27. return(struct dlist *)malloc(sizeof(struct dlist));
  28. }
  29.  
  30. void insert(float val)
  31. {
  32. struct dlist *p,*r;
  33. for(p=head->next;p->element<val;p=p->next);
  34. r=newldlist();
  35. r->element=val; r->next=p;
  36. (p->pred)->next=r; r->pred=p->pred; p->pred=r;
  37. }
  38.  
  39. void delete(float val)
  40. {
  41. struct dlist *p;
  42. for(p=head->next;p->element<val;p=p->next);
  43. if(p->element==val){
  44. (p->pred)->next=p->next;
  45. (p->next)->pred=p->pred;
  46. free(p);
  47. }
  48. }
  49.  
  50. void initialize(void)
  51. {
  52. head=newlist(); /*dummy node 1 */
  53. tail=newlist(); /*dummy node 2 */
  54. head->element=Nmax; head->pred=NULL; head->next=tail;
  55. tail->element=Pmax; tail->pred=head; tail->next=NULL;
  56. }
  57.  
  58. void display(void){ここを埋めよ}
  59.  
  60. void main(void){
  61. int mode;
  62. float val;
  63. initialize();
  64. mode=1;
  65. while(mode){
  66. printf("list process ?insert(1) or delete(0) = ");
  67. scanf("%d",&mode);
  68. if(mode==1){
  69. printf("?data ="); scanf("%f",&val); insert(val);
  70. }else if(mode==0){
  71. printf("?data ="); scanf("%f",&val); delete(val);
  72. }
  73. display();
  74. printf("contiunue(1) or quit(0) = "); scanf("%d",&mode);
  75. }
  76. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty