Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры - C#

Узнай цену своей работы

Формулировка задачи:

Создать очередь, информационные поля которой содержат строки из файла (список фамилий учащихся). Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры. (Учесть, что такая фамилия может оказаться первой в списке.) Программа исправно удаляет, если первый элемент Если иной, то удаляется 3-ий элемент Разбор дебагером и проверка значений не помогли Подскажите где искать ошибку Заранее спасибо!
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace task632
  7. {
  8. class Node // Узел для списка, стека, очереди
  9. {
  10. public string inf;
  11. public Node next;
  12. public Node(string inf, Node next) // Конструктор
  13. {
  14. this.inf = inf;
  15. this.next = next;
  16. }
  17. }
  18. class MyQueue // Класс очередь
  19. {
  20. Node head; // Голова
  21. Node tail;
  22. public MyQueue()
  23. {
  24. head = null;
  25. tail = null;
  26. }
  27. public bool QueueIsEmpty() // Проверка на пустоту
  28. {
  29. return head == null;
  30. }
  31. public void InQueue(string inf) // Положить в хвост очереди
  32. {
  33. Node p = new Node(inf, null);
  34. if (QueueIsEmpty())
  35. {
  36. head = p; tail = p;
  37. }
  38. else
  39. {
  40. tail.next = p; tail = p;
  41. }
  42. }
  43. public int Search() // Ищем индекс фамилии
  44. {
  45. Node p = head;
  46. int i = 0;
  47. Console.WriteLine("Введите букву");
  48. Char Ch = Convert.ToChar(Console.ReadLine());
  49. do
  50. {
  51. int found = p.inf.IndexOf(Ch);
  52. if (found == 0)
  53. return i;
  54. else
  55. i++;
  56. p = p.next;
  57. }
  58. while (p != null);
  59. return -1;
  60. }
  61. public void Delete(int index) // Удаляем фамилию по индексу
  62. {
  63. if (index != 0)
  64. {
  65. Node p = head;
  66. for (int i = index; i < index + 1; i++)
  67. p = p.next;
  68. if (p.next != null)
  69. p.next = p.next.next;
  70. }
  71. else
  72. head = head.next;
  73. }
  74. public void Print()
  75. {
  76. Node p = head;
  77. Console.WriteLine();
  78. do
  79. {
  80. Console.WriteLine(" {0} ", p.inf);
  81. p = p.next;
  82. }
  83. while (p != null);
  84. }
  85. }
  86. class Program
  87. {
  88. static void Main(string[] args)
  89. {
  90. int n = 5;
  91. FileStream File = new FileStream("C:\\text.txt", FileMode.Open);
  92. StreamReader f1 = new StreamReader(File);
  93. MyQueue queue = new MyQueue();
  94. string m = null;
  95. for (int i = 0; i < n; i++)
  96. {
  97. m = f1.ReadLine();
  98. queue.InQueue(m);
  99. }
  100. f1.Close();
  101. File.Close();
  102. int index = queue.Search();
  103. if (index != -1)
  104. queue.Delete(index);
  105. queue.Print();
  106. Console.ReadKey();
  107. }
  108. }
  109. }

Решение задачи: «Удалить из списка первую фамилию, начинающуюся с буквы, вводимой с клавиатуры»

textual
Листинг программы
  1. public void Delete(int index) //  Удаляем фамилию по индексу
  2.         {
  3.             if (index != 0)
  4.             {
  5.                 Node p = head;
  6.                 Node before;
  7.                 Node after;
  8.                 for (int i = 0; i < index-1; ++i)
  9.                 {
  10.                     p = p.next;
  11.                 }
  12.                 before = p;
  13.                 after = p.next.next;
  14.                 before.next = after;
  15.             }
  16.             else
  17.                 head = head.next;
  18.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы