fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct elem {
  5. int val;
  6. struct elem *next;
  7. struct elem *prev;
  8. } elem;
  9.  
  10. typedef struct {
  11. elem *first;
  12. elem *last;
  13. } seq_t;
  14.  
  15. seq_t* seq_create(int val) {
  16. seq_t *seq= malloc(sizeof(seq_t));
  17. elem *e = malloc(sizeof(elem));
  18. e->val = val;
  19. seq->first = e;
  20. seq->last = e;
  21. e->next = NULL;
  22. e->prev = NULL;
  23. return seq;
  24. }
  25.  
  26. /* add to the end */
  27. void seq_adde(seq_t *seq, int val) {
  28. elem *e = malloc(sizeof(elem));
  29. e->val = val;
  30. e->next = NULL;
  31. e->prev = seq->last;
  32. seq->last->next = e;
  33. seq->last = e;
  34. }
  35.  
  36. /* add to beginning */
  37. void seq_addb(seq_t *seq, int val) {
  38. elem *e = malloc(sizeof(elem));
  39. e->val = val;
  40. e->next = seq->first;
  41. e->prev = NULL;
  42. seq->first->prev = e;
  43. seq->first = e;
  44. }
  45.  
  46. void seq_free(seq_t *seq) {
  47. elem *e = seq->first;
  48. elem *ne;
  49. while(e!=NULL) {
  50. ne = e->next;
  51. free(e);
  52. e = ne;
  53. }
  54. free(seq);
  55. }
  56.  
  57. void seq_print(seq_t *seq) {
  58. elem *e = seq->first;
  59. while(e!=NULL) {
  60. printf("%d\n",e->val);
  61. e = e->next;
  62. }
  63. }
  64.  
  65. int main(void) {
  66. seq_t *seq = seq_create(3000);
  67. seq_addb(seq,2000);
  68. seq_adde(seq,4000);
  69. seq_addb(seq,1000);
  70. seq_adde(seq,5000);
  71. seq_print(seq);
  72. seq_free(seq);
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 2380KB
stdin
Standard input is empty
stdout
1000
2000
3000
4000
5000