Описать процедуру или функцию, которая заменяет в списке L все вхождения Е1 на Е2. Задача № 12. Простые списки. (см. "Сборник задач для начинающего программиста") Алгоритм: void main() #include <stdio.h> #include <stdlib.h> #define n 5 typedef struct NODE tnode; // структура ячейка typedef struct LIST list; // структура список struct NODE{ tnode *next; // указатель хранящий адрес на следующуюячейку списка int li; // указатель хранящий значение }; struct LIST{ tnode *left, //указатель хранящий левый элемент списка *right; //указатель хранящий правый элемент списка int count, //счётчик элементов в списке size; // размер списка }; int isoverflow (list* lt){ //если список полон return (lt->count == lt->size); } int isempty (list* lt){ //если список пуст return (lt->count == 0); } void initlist (list* lt, int sz){ //инициализация списка lt->count = 0; //кол-во элементов равно 0 lt->size=sz; //задаёться размер lt->right=lt->left=NULL; //начало списка явл его концом и не указывает на другие элементы } int append (list* lt, tnode* nd){ //функция ложит в список элементы с лева на право if (!isoverflow(lt)) // если список не переполнен { if(isempty(lt)) //если пустой { lt->left=lt->right=nd; //в список ложиться 1 элемент, кот. явл. и началом и концом } else { lt->right->next=nd; //добавляем ещё одну ячейку lt->right=nd; //записываем наше значение } lt->count ++; //увеличили счётчик элементов nd->next=NULL; //обрезали сылку return 1; } printf ("list is overflow"); return 0; } void lprint (list* lt){ //функция выводит список на экран tnode* temp=lt->left; //переменная которая идёт от левого конца до правого while(temp != NULL) //идём по списку { printf(" %d",temp->li); //выводим элемент списка на экран temp=temp->next; //перешли на новый элемент } } int main() { list lt; // создали указатель на список tnode *nd; // указатели на ячейки списка initlist(<, n); //инициализировали список printf ("введите элементы списка \n"); int i, k, E1, E2; for(i=0;i < n; i++) { scanf("%d", &k); //считали элемент списка nd = (tnode *) malloc(sizeof(tnode));//выделили память под ячейку списка nd->li = k; //присвоели его ячейки append(<,nd); //добавили ячейку в список } printf(" список \n"); lprint(<); //вывели список на экран printf ("введите Е1 \n"); scanf ("%d", &E1); printf("введите Е2 \n"); scanf ("%d", &E2); nd=lt.left; while(nd!= NULL) { if(nd->li == E1) { nd->li = E2; continue; } nd = nd->next; } printf("новый список \n"); lprint(<);//вывели список на экран return 0; }
Ключевые слова:
однонаправленный список, замена элементов в списке
|
|||||||