andImplementation of the previous stackBasically, it's a way of thinking:
Don't say much nonsense, just write the code
//Custom queue interfacenamespace queue { interface IQueue<T> { int Count { get; } int GetLength(); bool IsEmpty(); void Clear(); void Enqueue(T item); T Dequeue(); T Peek(); } }
//Sequential queue implementation classnamespace queue { class SeqQueue<T> : IQueue<T> { private T[] data; private int count; //Indicate how many elements are currently there private int front; //Team Head (Team Head Index-1) private int rear; //Termine (Termine element index) public SeqQueue(int size) { data = new T[size]; count = 0; front = -1; rear = -1; } public SeqQueue() { data = new T[10]; count = 0; front = -1; rear = -1; } public int Count { get { return count; } } public void Clear() { count = 0; front = -1; rear = -1; } public T Dequeue() { if(count > 0) { T temp = data[front + 1]; front++; count--; return temp; } else { ("There is no data in the queue, and the head of the team cannot be obtained"); return default(T); } } public void Enqueue(T item) { if (count == ) { ("Quote element is full, cannot be added"); } else { if (rear == -1) //Is there a value in the last position { data[0] = item; rear = 0; count++; } else { data[rear + 1] = item; rear += 1; count++; } } } public int GetLength() { return count; } public bool IsEmpty() { return count == 0; } public T Peek() { T temp = data[front + 1]; return temp; } } }
//The node class of the chain queuenamespace queue { class Node<T> { private T data; private Node<T> next; public Node(T data) { = data; } public T Data { get { return data; } set { data = value; } } public Node<T> Next { get { return next; } set { next = value; } } } }
//Chain queue implementation classnamespace queue { class LinkQueue<T> : IQueue<T> { private Node<T> front; //Head node private Node<T> rear; //The end point private int count; //Denote the number of elements public LinkQueue() { front = null; rear = null; count = 0; } public int Count { get { return count; } } public void Clear() { front = null; rear = null; count = 0; } public T Dequeue() { if (count == 0) { ("Quote is empty"); return default(T); }else if(count == 1) { T temp = ; front = rear = null; count = 0; return temp; } else { T temp = ; front = ; count--; return temp; } } public void Enqueue(T item) { Node<T> newNode = new Node<T>(item); if (count == 0) { front = newNode; rear = newNode; count = 1; } else { = newNode; rear = newNode; count++; } } public int GetLength() { return count; } public bool IsEmpty() { return count == 0; } public T Peek() { if (front != null) { return ; } else { return default(T); } } } }
//The above two implementation classes test classesnamespace queue { class Program { static void Main(string[] args) { // Queue in CRL //Queue<int> queue = new Queue<int>(); //The order of writing of your own //SeqQueue<int> queue = new SeqQueue<int>(); //Own chain queue LinkQueue<int> queue = new LinkQueue<int>(); (12); (34); (56); (78); (90); ("Size after adding five elements:"+ ); int i = (); //Departure (take out and delete) ("The elements taken out are: " + i); ("Quantity size after dequeue:" + ); int j = (); ("The elements that Peek takes out are: " + j); ("Fourthquad size after PeeK:" + ); (); ("Clear queue size:" + ); (); } } }
Summarize
The above is the entire content of this article. I hope that the content of this article has certain reference value for your study or work. Thank you for your support. If you want to know more about it, please see the following links