Реализация класса стек через указатели - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д