Замена элементов в списке

Описать процедуру или функцию, которая заменяет в списке L все вхождения Е1 на Е2. Задача № 12. Простые списки. (см. "Сборник задач для начинающего программиста")

Алгоритм:
1. Создаём однонаправленный список
2. Считываем элементы списка
2. Считываем элемент Е1 из списка
3. Считываем элемент Е2
4. Ищем в списке эементы Е1 и заменяем их на Е2
5. Выводим новый список на экран

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(&lt, 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(&lt,nd);     //добавили ячейку в список
  }
  printf(" список  \n");
  lprint(&lt);      //вывели список на экран
 
 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(&lt);//вывели список на экран
 
 return 0;
}

Ключевые слова: 
однонаправленный список, замена элементов в списке
ВложениеРазмер
List.rar8.35 кб