数据结构之栈和队列

链式队列c++代码:

#include<iostream>
using namespace std;

typedef int ElemType;

struct QueueNode{
	ElemType data;
	QueueNode *next;
};

class ListQueue{
private:
	QueueNode *front,*rear;
public:
	ListQueue();
	~ListQueue();
	bool EnQueue(ElemType e);
	bool DeQueue(ElemType *e);
	bool Print();
};

inline ListQueue::ListQueue()
{
	front = new QueueNode();
	rear = front;
}

inline ListQueue::~ListQueue()
{
	QueueNode *p;
	while(front!=rear)
	{
		p = rear;
		rear = rear->next;
		delete p;
	}
	delete front;
}

bool ListQueue::EnQueue(ElemType e)//入队
{
	QueueNode *s = new QueueNode();
	if(!s)
		return false;
	s->data = e;
	s->next = NULL;
	rear->next = s;
	rear = s;
	return true;
}

bool ListQueue::DeQueue(ElemType *e)//出队
{
	if(rear == front)
		return false;
	QueueNode *s = front->next;//当前节点
	*e = s->data;
	front->next = s->next;
	if(rear == s)
		rear = front;
	delete s;
	return true;
}

bool ListQueue::Print()
{
	if(front == rear)
	{
		cout<<"队列为空!"<<endl;
		return false;
	}
	cout<<"当前队列:";
	QueueNode *s = front;
	while(s !=  rear)
	{
		s = s->next;
		cout<<s->data<<" ";
	}
	cout<<endl;
}

int main()
{
	ListQueue *L = new ListQueue();
	for(int i = 1;i<5;i++)
	{
		L->EnQueue(i);
	}
	L->Print();
	for(int i = 1;i<5;i++)
	{
		ElemType k;
		L->DeQueue(&k);
		cout<<"出队元素:"<<k<<endl;
		L->Print();
	}
	return 0;
}

链栈c++代码:
#include<iostream>
using namespace std;

typedef int ElemType;

struct StackNode{//节点类型
	ElemType data;
	StackNode *next;
};

class ListStack{
private:
	StackNode *base,*top;
public:
	ListStack();
	~ListStack();
	bool Push(ElemType e);
	bool Pop(ElemType *e);
	bool Print();
};

inline ListStack::ListStack()//初始化
{
	base = new StackNode();//建一个head节点,里面不存放数据
	base->next = NULL;
	top = base;
}

inline ListStack::~ListStack()
{
	StackNode *p;
	while(top!=base)
	{
		p = top;
		top = top->next;
		delete p;
	}
}

bool ListStack::Push(ElemType e)
{
	StackNode *s = new StackNode();
	if(!s)
		return false;//内存申请失败
	s->data = e;
	s->next = top;
	top = s;
	return true;
}

bool ListStack::Pop(ElemType *e)
{
	if(top == base)
		return false;//栈为空
	StackNode *p = top;
	*e = p->data;
	top = p->next;
	delete p;
	return true;
}

bool ListStack::Print()
{
	if(top == base)
	{
		cout<<"栈为空!"<<endl;
		return false;
	}
	cout<<"当前栈:";
	StackNode *p = top;
	while(p!=base)
	{
		cout<<p->data<<" ";
		p = p->next;
	}
	cout<<endl;
}

int main()
{
	ListStack *L = new ListStack();
	for(int i = 1;i<5;i++)
	{
		L->Push(i);
	}
	L->Print();
	for(int i = 1;i<5;i++)
	{
		ElemType k;
		L->Pop(&k);
		cout<<"弹出元素:"<<k<<endl;
		L->Print();
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值