Прикреплённый файл «1.c»
Загрузка 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 }
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.