Двусвязный Список

b0006

New member
17.12.2013
2
0
#1
Вот задание:
1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты.
2. Разместить объекты в контейнере.

Языки программирования
Общее свойство: год разработки – короткое целое
1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина)
2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип)
3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип)

Я имею представление,что такое двусвязный список, но написать его не знаю как.

Вот только что я смог сделать:
Program.cs
<!--shcode--><pre><code class='csharp'>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace text
{
class Program
{
static void Main(string[] args)
{
Spisok a = new Spisok();
int menu = -1;
int t = 0;
while (menu != 5)
{
Console.WriteLine();
Console.WriteLine("1.Прочитать текст\n2.Вывести на монитор\n3.Сортировка\n4.Записать в файл\n5.Выход из консоли");
Console.WriteLine();
try
{
menu = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("\n Введите числа из меню \n");
}
switch(menu)
{
case 1:
Console.Clear();
Spisok.ReadFile(a);
Console.WriteLine("Текст прочитан с текстового файла TextFile1.txt");
Console.ReadKey();
Console.Clear();
t = 1;
break;
case 2:
if (t == 1)
{
Console.Clear();
a.Print();
Console.ReadKey();
Console.Clear();
}
else
{
Console.Clear();
Console.WriteLine("Сначала выполни предыдущий пункт");
Console.ReadKey();
Console.Clear();
}
break;
case 3:
Console.Clear();
Console.WriteLine("Код пока не написан");
Console.ReadKey();
Console.Clear();
break;
case 4:
Console.Clear();
Console.WriteLine("Код пока не написан");
Console.ReadKey();
Console.Clear();
break;
case 5:
break;
default:
Console.Clear();
Console.WriteLine("\nНеверно введено значение");
Console.ReadKey();
Console.Clear();
break;
}
}
}
}
class Proc : Base // класс процедурных языков
{
bool Atd; // наличие АТД
public Proc(short age, bool Atd)
{
this.age = age;
this.Atd = Atd;
}
public override string F()
{
return "Процедурный язык. Год:\t" + age + " АТД: " + Atd;
}
}
enum legacy { одинарное, множественное, интерфейс }
class Obj : Base // класс объектно=ориентированных языков
{
legacy d; //наследование
public Obj(short age, legacy d)
{
this.age = age;
this.d = d;
}
public override string F()
{
return "Объектно-оринетированный. Год:\t" + age + " Наследование: " + d;
}
}
enum tip { строгая, динамическая }
class Func : Base // класс функциональных языков
{
tip t; // типизация
bool lazy; //поддержка "ленивых" вычислений
public Func(short age, tip t, bool lazy)
{
this.age = age;
this.t = t;
this.lazy = lazy;
}
public override string F()
{
return "Функциональные. Год:\t" + age + " Типизация:\t" + t + " \tЛеннивость: " + lazy;
}
}
abstract public class Base // главный класс (объединяет все)
{
public abstract string F(); // абстрактная функция
public short age { get; set; } // общее свойство(год разработки)
}
}[/CODE]
Создал еще класс "Spisok", и запихал в контейнеры, НО это не двусвязный список...может кто сможет переделать под двусвязный
Spisok.cs
<!--shcode--><pre><code class='csharp'>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace text
{
class Spisok
{
class Node
{
public Base data;
public Node next;
};
Node first;
Node last;
int R = 0;
public void Print()
{
Console.Write("Содержимое: \n");
for (Node cur = first; cur != null; cur = cur.next)
{
Console.WriteLine(cur.data.F());
}
Console.WriteLine();
}
public void Addi(Base value)
{
Node tmp = new Node();
tmp.data = value;
tmp.next = null;
if (first == null)
{
first = tmp;
last = tmp;
}
else
{
last.next = tmp;
last = tmp;
}
R++;
}
public void Remove()
{
if (first != null)
{
first = first.next;
if (first == null)
{
last = null;
}
}
R--;
}
public Base this[int i]
{
get
{
for (Node cur = first; cur != null; cur = cur.next, i--)
{
if (i == 0)
{
return cur.data;
}
}
return null;
}
set
{
for (Node cur = first; cur != null; cur = cur.next, i--)
{
if (i == 0)
{
cur.data = value;
}
}
}
}
//public static LinkedList<Proc> s = new LinkedList<Proc>();
public static void ReadFile(Spisok sp)
{
LinkedList<Base> ss = new LinkedList<Base>();
try
{
StreamReader file = new StreamReader(@"..\..\TextFile1.txt", Encoding.Default);
while (!file.EndOfStream)
{
string[] data = file.ReadLine().Split(' ');
if (data[0] == "Proc")
{
ss.AddLast(new Proc(Convert.ToInt16(data[1]), Convert.ToBoolean(data[2])));
}
else if (data[0] == "Obj")
{
if (data[2] == "одинарное")
{
sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.одинарное));
}
if (data[2] == "множественное")
{
sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.множественное));
}
if (data[2] == "интерфейс")
{
sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.интерфейс));
}
}
else if (data[0] == "Func")
{
if (data[2] == "строгая")
{
sp.Addi(new Func(Convert.ToInt16(data[1]), tip.строгая, Convert.ToBoolean(data[3])));
}
if (data[2] == "динамическая")
{
sp.Addi(new Func(Convert.ToInt16(data[1]), tip.динамическая, Convert.ToBoolean(data[3])));
}
}
}
}
catch(Exception e)
{
Console.WriteLine("Ошибка: " + e.Message);
}
}
}
}[/CODE]
 

Вложения

  • 193 байт Просмотры: 9