public void Add(Animal value) //Метод добавления нового узла. { Node tmp = new Node(); tmp.data = value; tmp.next = null; tmp.prev = null; if (first == null) { first = tmp; last = tmp; } else { last.next = tmp; tmp.prev = last; last = tmp; } }
static void Main(string[] args) { string input = "input.txt"; //Входной файл. string output = "output.txt"; //Входной файл. string tempLine = string.Empty; //Строка-буфер. StreamReader RFile = new StreamReader(input); //Открываем поток на чтение. StreamWriter WFile = new StreamWriter(output); //Открываем поток на чтение. Animal[] animal = new Animal[1000]; //Создаем 1000 экземпляров класса животные. LinkedList ALinkedList = new LinkedList(); //Создаем двусвязный список с животными. int indexOfAnimal = 0; //Индекс животных. while ((tempLine = RFile.ReadLine()) != null) { //Считываем файл до конца. if (tempLine.Length == 1 && Char.IsDigit(tempLine, 0) == true) //Ищем строку с типом животного (рыба/птица) { if (tempLine == "1") //Если рыба, то { animal[indexOfAnimal] = new Fish(); //Создаем объект рыба. animal[indexOfAnimal].Read(RFile); //Считываем данные в рыбу. ALinkedList.Add(animal[indexOfAnimal]); //Ставим рыбу в очередь. indexOfAnimal++; //Увеличиваем индекс. } if (tempLine == "2") //Если птица, то { animal[indexOfAnimal] = new Bird(); //Создаем объект птица. animal[indexOfAnimal].Read(RFile); //Считываем данные в птицу. ALinkedList.Add(animal[indexOfAnimal]); //Ставим птицу в очередь. indexOfAnimal++; //Увеличиваем индекс. } if (tempLine == "3") //Если зверь, то { animal[indexOfAnimal] = new Beast(); //Создаем объект зверь. animal[indexOfAnimal].Read(RFile); //Считываем данные в зверя. ALinkedList.Add(animal[indexOfAnimal]); //Ставим зверя в очередь. indexOfAnimal++; //Увеличиваем индекс. } } } ALinkedList.Sort(); try { while (true) { ALinkedList.Pull().Write(WFile); //Записываем список в файл. } } catch (Exception) { }; RFile.Close(); //Закрываем поток чтения. WFile.Close(); //Закрываем потом записи. }