Attachment '1.c'

Download

   1 #include <stdio.h>
   2 #include <stdlib.h>
   3 
   4 struct node_struct {
   5     int elem; // полезный элемент
   6     struct node_struct *next; // ссылка на следующую структуру
   7 };
   8 
   9 typedef struct node_struct node;
  10 typedef node* list;
  11 const list empty_list=NULL;
  12 
  13 /* список -- это указатель на узел. Если указатель = NULL, то список считается пустым.
  14  *
  15  * для этого константа empty_list.
  16  *
  17  * Непустой список -- это указатель на узел (который в этом случае называется головой списка).
  18  * Узел содержит указатель next, который является в свою очередь списком.
  19  *
  20  */
  21 
  22 list new_elem()
  23 {
  24     return malloc(sizeof(node));
  25 }
  26 
  27 void print_node( list l )
  28 {
  29     if( l == empty_list )
  30       printf( "empty list\n");
  31     else
  32       printf( "node [%X]: elem = %d, next = %X\n", (unsigned)l,
  33               (*l).elem, (unsigned)(*l).next );
  34 }
  35 
  36 void print_list( list l )
  37 {
  38     list i;
  39     i = l;
  40     if( i == empty_list )
  41     {
  42         printf("empty list\n");
  43     }
  44     while( i != empty_list )
  45     {
  46         print_node( i );
  47         i = i->next;
  48     }
  49 }
  50 
  51 int length( list l )
  52 {
  53     // возвращает длину списка в элементах
  54     list i;
  55     int len = 0;
  56     for(i = l; i != empty_list; i = i->next)
  57         len ++;
  58     return len;
  59 }
  60 
  61 void square_list( list l)
  62 {
  63     // возводит в квадрат каждый элемент списка
  64     list i;
  65     for(i = l; i != NULL; i = i->next) {
  66         i->elem = i->elem * i->elem;
  67     }
  68 }
  69 
  70 list read_list_reversed()
  71 {
  72     // ... прочитать список с клавиатуры в обратном порядке
  73     list l;
  74     list p;
  75     int k;
  76     scanf("%d", &k );
  77     l = empty_list;
  78     while( k != 0 )
  79     {
  80         p = new_elem();
  81         p->elem = k;
  82         p->next = l;
  83         l = p;
  84         scanf("%d", &k);
  85     }
  86     return l;
  87 }
  88 
  89 void insert( list *l, int e )
  90 {
  91     // вставить в начало списка l новый элемент со значением e.
  92     list p;
  93     p = new_elem();
  94     p->elem = e;
  95     p->next = *l;
  96     *l = p;
  97     //printf("inside: \n" );
  98     //print_list(*l);
  99 }
 100 
 101 // ЗАДАЧИ ////////////////////////////////////////////////////////
 102 
 103 list read_list()
 104 {
 105     // прочитать список с клавиатуры в прямом порядке
 106 }
 107 
 108 list reverse_new( list l )
 109 {
 110     // перевернуть порядок элементов в списке и вернуть новый список
 111 }
 112 
 113 list reverse( list l )
 114 {
 115     // перевернуть порядок элементов в списке и вернуть список
 116 }
 117 
 118 void print_reverse( list l )
 119 {
 120     // напечатать элементы списка в обратном порядке
 121 }
 122 
 123 list make_test_list()
 124 {
 125     list l, l1;
 126     l = empty_list;
 127 
 128      l1 = malloc( sizeof(node) ); // новый узел
 129     (*l1).elem = 7;
 130     (*l1).next = l;
 131     l = l1; //
 132 
 133     l1 = malloc( sizeof(node) ); // новый узел
 134     (*l1).elem = 8;
 135     (*l1).next = l;
 136     l = l1; //
 137 
 138     l1 = malloc( sizeof(node) ); // новый узел
 139     (*l1).elem = 9;
 140     (*l1).next = l;
 141     l = l1; //
 142     return l;
 143 }
 144 
 145 int main()
 146 {
 147     list l = make_test_list();
 148     list l1;
 149     list l2;
 150 
 151     print_list (l);
 152 
 153     printf("length(l) = %d\n", length( l ));
 154     printf("length(empty_list) = %d\n", length( empty_list ));
 155 
 156     square_list(l);
 157 
 158     print_list (l);
 159 
 160 /////////////
 161 
 162     printf("enter integer values terminated by 0: \n");
 163     l1 = read_list_reversed();
 164     print_list (l1);
 165 
 166 /////////////
 167 
 168     printf("==== insertion === \n ");
 169     l2 = empty_list;
 170     print_list (l2);
 171     insert( &l2, 77 );
 172     insert( &l2, 78 );
 173     insert( &l2, 79 );
 174     insert( &l2, 80 );
 175     //printf("outside:\n");
 176     print_list (l2);
 177 
 178     return 0;
 179 }

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.