数据结构:实验四栈和队列的基本操作实现及其应用
程序员文章站
2024-01-24 17:29:52
...
一、实验目的
1,熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2,学会使用栈和队列解决实际问题。
二、实验内容
1,自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2,设计算法并写出代码,实现一个十将二进制转换成2进制数。“
三.实验报告
1.实验代码如下:
#include<iostream>
using namespace std;
template < typename T >
struct Node
{
T data;
Node<T> *next;
};
template < typename T >
class LinkStack {
public:
LinkStack(T array[], int n)
{
top = NULL;
Node<T> *node = NULL;
for (int i = 0; i < n; i++) {
node = new Node<T>;
node->data = array[i];
node->next = top;
top = node;
}
}
~LinkStack()
{
Node<T> *deleteNode = NULL;
deleteNode = top;
top = top->next;
delete deleteNode;
}
void push(T x);
T pop();
void print();
T gettop() { if (top != NULL) return top->data; }
int Empty() { top == NULL ? return 1 : return 0; }
private:
Node <T> *top;
};
template < typename T >
void LinkStack<T>::push(T x)
{
Node<T> *s;
s = new Node<T>;
s->data = x;
s->next = top;
top = s;
}
template < typename T >
T LinkStack<T>::pop()
{
T x;
Node<T> *p;
if (top == NULL)throw"下溢";
x = top->data; p = top;
top = top->next;
delete p;
return x;
}
template <class T>
void LinkStack<T>::print()
{
Node<T> *node = top;
while (node->next != NULL) {
cout << node->data << " ";
node = node->next;
}
cout << node->data << endl;
}
void main()
{
int arr[] = { 1,2,3,4,5 };
cout << "创建对象:1,2,3,4,5依次入栈 " << endl;
LinkStack<int> a(arr, 5);
cout << "遍历栈内的元素:";
a.print();
cout << "出栈一个元素" << a.pop() << endl;
cout<<"结果如下:" ;
a.print();
cout << "现在栈顶元素为:" << a.gettop();
cout << "入栈元素6~10:" << endl;
for (int i = 6; i <= 10; i++)
{
a.push(i);
}
cout << "遍历栈内的元素:";
a.print();
}
2.实验结果
四.实验总结
创立对象1,2,3,4,5依次入栈,遍历结果5,4,3,2,1,出栈一个元素5,得遍历结果4,3,2,1,入栈元素6,7,8,9,10,遍历结果10,9,8,7,6,4,3,2,1.
上一篇: EDA二手车数据分析
下一篇: [数据结构]栈与栈的应用