Циклический однонаправленный линейный список с функцией поиска отрицательных элементов в списке - C#

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

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

Помогите организовать циклический однонаправленный линейный список с функцией поиска отрицательных элементов в списке. см. ниже вместо <<<<<<<<<<<<<<<< код >>>>>>>>>>>>> (нужно только поменять маленько) В данный момент тут организован циклический однонаправленный линейный список с функцией вставки элемента в список справа от условно последнего элемента. Спасибо!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        class ListElem // класс элемент списка
        {
            public int Value; // поле данных
            public ListElem Next; // поле - переход на след. элемент
            public ListElem(ListElem next, int value) // конструктор класса
            {
                Next = next; // заполнение поля
                Value = value; // заполнение поля
            }
        }
        class List // класс список
        {
            int value,count=0;
            public ListElem head = null; // заголовок списка
            public ListElem current = null; // текущий элемент списка
            public List() { } // пустой конструктор
 
            public void Menu() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.WriteLine("Главное меню:\n");
                Console.WriteLine(" 1. Заполнить список.");
                Console.WriteLine(" 2. Просмотреть список.");
                Console.WriteLine(" 3. Индивидуальное задание(вариант 20).");
                Console.WriteLine(" 4. Удалить элемент.");
                Console.WriteLine(" 5. Очистить список.");
                Console.WriteLine(" 6. Выход.\n");
                Console.WriteLine("\nВЫБЕРИТЕ НОМЕР НУЖНОГО ЗАДАНИЯ!\n");
 
            }
            public void FirstElem() // вставка элемента в начало списка
            {
                Console.Clear();
             
                int n = 10;
                Console.WriteLine("Введите " + n + " элементов.\n");
                for (int i = 0; i < n; i++)
                {
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value); // создание нового элемента списка и заполнение его значениями
                    if (head == null) // если список пуст
                        head = temp; // новый элемент становится первым
                    else
                    {
                        temp.Next = head; // добавление в новый элемент ссылки на первый элемент
                        head = temp; // перезапись первого элемента
                    }
                }
                current = head;
                while (current.Next != null)
                    current = current.Next;
                current.Next = head;
                count+=10;
            }
 
            public void Show() // метод просмотра списка
            {
                Console.Clear();
                Console.Write("Циклический однонаправленный список: ");
                if (count==0) // если список пуст
                    Console.WriteLine("список пуст!");
                else
                {
                    int counter1 = 0;
                    ListElem temp = head; // создание нового элемента и запись в него первого
                    while (counter1<count) // цикл до конца списка
                    {
                        Console.Write(temp.Value + "  "); // вывод на экран текущего значения
                        temp = temp.Next; // переход к след. элементу
                        counter1++;
                    }
                    Console.WriteLine("");
                }
            }

            public void Right_Element()//вставка справа от текущего 
            {
                Console.Clear();
                if (head == null)
                {
                    Console.WriteLine("Заполните список!");
                }
                else
                {
                    int m = count;
                    current = head;
                    for (int i = 1; i < m; i++)
                        current = current.Next; // переход к след. элементу;
                    Console.WriteLine("Введите число: ");
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value);
                    temp.Next = current.Next;
                    current.Next = temp;
                    current = temp;
                    count++;
                }
            }
            public void Delete_Elements()//удаление элемента 
            {
                Console.Clear();
                if (head != null)
                {
                    Show();
                    ListElem temp = head;
                    ListElem prev = head;
                    int i = 1;
                    Console.WriteLine("Введите позицию в списке (число): ");
                    int pos = int.Parse(Console.ReadLine());
                    while (pos != i)
                    {
                        prev = temp;
                        temp = temp.Next;
                        i++;
                    }
                    if (head == temp)
                        head = head.Next;
                    else
                        prev.Next = temp.Next;
                    count--;
                }
                else
                    Console.WriteLine("Список и так пустой! Удалять нечего.");
            }
            public void Clear_list()//метод очистки списка 
            {
                ListElem temp; int i = 0;
                while (i<count)
                {
                    temp = head.Next;
                    head = temp;
                    count--;
                }
            }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            public void Variant_20()//
            {
                Console.Clear();
                Console.WriteLine("20.  Организовать однонаправленный линейный список с функцией вывода на экран элементов меньших первого элемента.\n");
                ListElem temp = head.Next;
               // ListElem prev = head;
                if (head != null)
                {
                    bool flag = false;
                    while (temp != null)
                    {
                        if (temp.Value < head.Value)
                        { Console.Write(temp.Value.ToString() + " "); flag = true; }
                        temp = temp.Next;
                    }
                    if (flag == false) Console.Write("Элементов, меньше первого, нет в списке");
                  }
                else
                    Console.WriteLine("Список пуст!");
            }>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        }
        static void Main(string[] args)
        {
            List List = new List();
            List.Menu();
            int c = int.Parse(Console.ReadLine());
            while (c != 8)
            {
                switch (c)
                {
                    case 1: List.FirstElem(); break;//заполнить список
                    case 2: List.Show(); break;//просмотреть список
                    case 3: List.Right_Element(); break;//добавить новый элемент
                    case 4: List.Delete_Elements(); break;//удалить элемент
                    case 5: List.Clear_list(); break;//очистить список
                    case 6: break;//выход
                    default: Console.Write("Команды с таким номером нет!"); break;
                }
                do Console.Write("\nДля продолжения нажмите клавишу Enter....");
                while (Console.ReadKey().Key != ConsoleKey.Enter);
 
                List.Menu();
                c = int.Parse(Console.ReadLine());
            }
        }

Решение задачи: «Циклический однонаправленный линейный список с функцией поиска отрицательных элементов в списке»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        class ListElem // класс элемент списка
        {
            public int Value; // поле данных
            public ListElem Next; // поле - переход на след. элемент
            public ListElem(ListElem next, int value) // конструктор класса
            {
                Next = next; // заполнение поля
                Value = value; // заполнение поля
            }
        }
        class List // класс список
        {
            int value;
            public ListElem head = null; // заголовок списка
            public ListElem current = null; // текущий элемент списка
            public List() { } // пустой конструктор
 
            public void Menu() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.WriteLine("Главное меню:\n");
                Console.WriteLine(" 1. Заполнить список.");
                Console.WriteLine(" 2. Просмотреть список.");
                Console.WriteLine(" 3. Добавить новый элемент.");
                Console.WriteLine(" 4. Поиск элемента.");
                Console.WriteLine(" 5. Удалить элемент.");
                Console.WriteLine(" 6. Очистить список.");
                Console.WriteLine(" 7. Индивидуальное задание(вариант 12).");
                Console.WriteLine(" 8. Выход.\n");
                Console.WriteLine("\nВЫБЕРИТЕ НОМЕР НУЖНОГО ЗАДАНИЯ!\n");
 
            }
            public void FirstElem() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.Write("Сколько элементов Вы хотите ввести? ");
                int n = int.Parse(Console.ReadLine());
                Console.WriteLine("Введите " + n + " элементов.\n");
                for (int i = 0; i < n; i++)
                {
                    value = int.Parse(Console.ReadLine());
 
 
                    ListElem temp = new ListElem(null, value); // создание нового элемента списка и заполнение его значениями
                    if (head == null) // если список пуст
                        head = temp; // новый элемент становится первым
                    else
                    {
                        temp.Next = head; // добавление в новый элемент ссылки на первый элемент
                        head = temp; // перезапись первого элемента
                    }
                }
            }
 
            public void Show() // метод просмотра списка
            {
                Console.Clear();
                Console.Write("Однонаправленный список: ");
                if (head == null) // если список пуст
                    Console.WriteLine("список пуст!");
                else
                {
                    ListElem temp = head; // создание нового элемента и запись в него первого
                    while (temp != null) // цикл до конца списка
                    {
                        Console.Write(temp.Value + "  "); // вывод на экран текущего значения
                        temp = temp.Next; // переход к след. элементу
                    }
                    Console.WriteLine("");
                }
            }
 
            public void FindElem() // метод поиска элемента по значению
            {
                Console.WriteLine("Введите элемент для поиска: ");
                value = int.Parse(Console.ReadLine());
                ListElem temp = head; // запись первого элемента в новый
                Console.WriteLine("Результаты поиска: ");
                while (temp != null) // цикл пока не дошли до конца списка
                {
                    if (temp.Value == value) // если элемент найден
                        Console.Write(temp.Value); // вернуть найденный элемент
                    temp = temp.Next; // переход к след. элементу
                }
            }
           
            public void Right_Element()//вставка справа от текущего 
            {
                Console.Clear();
                if (head == null)
                {
                    Console.WriteLine("Заполните список!");
                }
                else
                {
                    Console.WriteLine("После какого элемента вставить новый? ");
                    int m = int.Parse(Console.ReadLine());
                    current = head;
                    for (int i = 1; i < m; i++)
                        current = current.Next; // переход к след. элементу;
                    Console.WriteLine("Введите число: ");
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value);
                    temp.Next = current.Next;
                    current.Next = temp;
                    current = temp;
                }
            }
            public void Delete_Elements()//удаление элемента 
            {
                Console.Clear();
                if (head != null)
                {
                    Show();
                    ListElem temp = head;
                    ListElem prev = head;
                    int i = 1;
                    Console.WriteLine("Введите позицию в списке (число): ");
                    int pos = int.Parse(Console.ReadLine());
                    while (pos != i)
                    {
                        prev = temp;
                        temp = temp.Next;
                        i++;
                    }
                    if (head == temp)
                        head = head.Next;
                    else
                        prev.Next = temp.Next;
                }
                else
                    Console.WriteLine("Список и так пустой! Удалять нечего.");
            }
            public void Clear_list()//метод очистки списка 
            {
                ListElem temp;
                while (head != null)
                {
                    temp = head.Next;
                    head = temp;
                }
            }
 
            public void Variant_20()//индивидуальное задание
            {
                Console.Clear();
                Console.WriteLine("12.  Организовать однонаправленный линейный список с функцией вывода на экран отрицательных элементов.\n");
                ListElem temp = head.Next;
               // ListElem prev = head;
                if (head != null)
                {
                    bool flag = false;
                    while (temp != null)
                    {
                        if (temp.Value < 0)
                        { Console.Write(temp.Value.ToString() + " "); flag = true; }
                        temp = temp.Next;
                    }
                    if (flag == false) Console.Write("отрицательних Элементов, нет в списке");
                  }
                else
                    Console.WriteLine("Список пуст!");
            }
        }
        static void Main(string[] args)
        {
            List List = new List();
            List.Menu();
            int c = int.Parse(Console.ReadLine());
            while (c != 8)
            {
                switch (c)
                {
                    case 1: List.FirstElem(); break;//заполнить список
                    case 2: List.Show(); break;//просмотреть список
                    case 3: List.Right_Element(); break;//добавить новый элемент
                    case 4: List.FindElem(); break;//поиск элемента
                    case 5: List.Delete_Elements(); break;//удалить элемент
                    case 6: List.Clear_list(); break;//очистить список
                    case 7: List.Variant_12(); break;//индивидуальное задание (12 вариант)
                    case 8: break;//выход
                    default: Console.Write("Команды с таким номером нет!"); break;
                }
                do Console.Write("\nДля продолжения нажмите клавишу Enter....");
                while (Console.ReadKey().Key != ConsoleKey.Enter);
 
                List.Menu();
                c = int.Parse(Console.ReadLine());
            }
        }
    }
}

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

15   голосов , оценка 4.067 из 5
Похожие ответы