Реализация класса стек через указатели - C#
Формулировка задачи:
Хочу написать свой класс Стек, используя не массив, а указатели....
в С++ с этим проблем более-менее уже нет, а вот в C#....
в шарпе программирую второй день всего.... с указателями и небезопасными кодами не разобрался....
вот... попробовал начать писать программу
Как все же мне решить данную проблему?
class Stack_Result{
struct Node
{ //структура Node
double data; //элемент
Node* next; //указатель на следующий элемент стека
Node(double d, Node* p)
{
d = 0;
next = p;
}
};
Node top;
//операции стека
//добавление эллемента в стек
public void push(double value)
{
}
//взятие элемента из головы стека
public void peek()
{
}
//удаление элемента стека
public void del()
{
}
};Решение задачи: «Реализация класса стек через указатели»
textual
Листинг программы
using System;
using System.Runtime.InteropServices;
class Program
{
static unsafe void WriteDouble(IntPtr ptr, int offset, double value)
{
byte* p = (byte*)&value;
for (int i = 0; i < sizeof(double); i++)
Marshal.WriteByte(ptr, offset + i, *(p + i));
}
static unsafe double ReadDouble(IntPtr ptr, int offset)
{
double value = 0.0;
byte* p = (byte*)&value;
for (int i = 0; i < sizeof(double); i++)
{
*p = Marshal.ReadByte(ptr, offset + i);
p++;
}
return value;
}
static void Main(string[] args)
{
IntPtr ptr = Marshal.AllocHGlobal(sizeof(double) * 2);
WriteDouble(ptr, sizeof(double) * 0, Math.PI);
WriteDouble(ptr, sizeof(double) * 1, Math.E);
Console.WriteLine("Записанные данные: ");
Console.WriteLine(Math.PI);
Console.WriteLine(Math.E);
Console.WriteLine("Считанные данные: ");
Console.WriteLine(ReadDouble(ptr, sizeof(double) * 0));
Console.WriteLine(ReadDouble(ptr, sizeof(double) * 1));
Marshal.FreeHGlobal(ptr);
Console.ReadKey(true);
}
}