Реализация класса стек через указатели - 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);
    }
}

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


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

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

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