一、栈实现
基本功能:
- 压栈
- 出栈
代码实现:
#include <iostream>
using namespace std;
typedef struct node {
int data;
struct node* pNext;
}LinkStack;
class LkStack
{
public:
LinkStack* pushStack( int n);
LinkStack* popStack(int pdata);
private:
LinkStack* _top;
};
LinkStack* LkStack::pushStack( int n)
{
LinkStack* p = nullptr;
p = reinterpret_cast<LinkStack*>(sizeof(LinkStack));
p->data = n;
p->pNext = _top;
_top = p;
return _top;
}
LinkStack* LkStack::popStack(int pdata)
{
LinkStack* p;
if(_top!=nullptr)
{
p = _top;
pdata = _top->data;
_top = p->pNext;
delete p;
}
return _top;
}
//int main()
//{
// cout<<"success"<<endl;
//}
二、队列
基本功能:
- 判断队空
- 取队头元素
- 入队
- 出队
设计原理:
代码实现:
#include <iostream>
using namespace std;
typedef struct node {
int data;
struct node* next;
}LinkListNode;
typedef struct {
LinkListNode* front, * rear;
}LinkQueue;
class LkQueue
{
public:
LkQueue();
bool IsEmpty_LkQueue();
bool Get_LkQueue(int* x);
void Insert_LkQueue(int x);
LinkListNode* Del_LkQueue();
void Destroy_LkQueue();
void dis();
private:
LinkQueue* lq = &node;
//定义指针域lq,front始终指向队头,rear指向队尾
LinkQueue node;
};
LkQueue::LkQueue()
{
lq->front = static_cast<LinkListNode*>(malloc(sizeof(LinkListNode)));
lq->front->next = nullptr;
lq->rear = lq->front;
}
bool LkQueue::IsEmpty_LkQueue()
{
if (lq->front == lq->rear)
return true;
return false;
}
bool LkQueue::Get_LkQueue(int* x)
{
if (IsEmpty_LkQueue())
return false;
x = &(lq->front->next->data);
return true;
}
void LkQueue::Insert_LkQueue(int x)
{
lq->rear->next = static_cast<LinkListNode*>(malloc(sizeof(LinkListNode)));
lq->rear = lq->rear->next;
lq->rear->data = x;
lq->rear->next = nullptr;
}
LinkListNode* LkQueue::Del_LkQueue()
{
LinkListNode* s = nullptr;
if (!IsEmpty_LkQueue())
{
s = lq->front->next;
if (s->next == nullptr)
lq->front = lq->rear;//队列中只有一个元素,将队列置空
else
lq->front->next = s->next;
return s;
}
return nullptr;
}
void LkQueue::Destroy_LkQueue()
{
LinkListNode* s;
while (!IsEmpty_LkQueue())
{
s = Del_LkQueue();
free(s);
}
free(lq->front);
lq->front = nullptr;
lq->rear = nullptr;
}
void LkQueue::dis()
{
LinkListNode* s = nullptr;
s = lq->front;
cout << "success" << endl;
while (s != lq->rear)
{
cout << s->next->data << " ";
s = s->next;
}
cout << endl;
}
int main()
{
cout << "success0111" << endl;
LkQueue s;
s.Insert_LkQueue(2);
s.Insert_LkQueue(5);
s.Insert_LkQueue(7);
s.dis();
s.Del_LkQueue();
s.dis();
return 0;
}