- 栈的顺序实现及操作
1.建立顺序栈;
2.顺序栈的push操作;
从栈顶开始打印栈;
3.获取顺序栈长度;
4.顺序栈的pop操作;
5.清空顺序栈;
- 栈的链式表示及操作
1.建立链式栈;
2.链式栈的push操作;
从栈顶开始打印栈;
3.获取链式栈长度;
4.链式栈的pop操作;
5.清空链式栈;
- 队列的链式表示和操作
1.初始化队列
2.判断队列是否为空
3.入队操作
4.出队操作
5.清空队列
//栈的顺序实现及操作
#include<iostream>
#include<malloc.h>
#include<conio.h>
#include<windows.h>
#define Stack_Size 50
using namespace std;
typedef struct
{
int elem[Stack_Size];
int top;//用来存放栈顶元素的下标
}SeqStack;
void InitStack(SeqStack *&S)
{
/*构造一个空栈S*/
S=(SeqStack*)malloc(sizeof(SeqStack));
S->top=-1;
}
int Push(SeqStack *S,int x)
{
if(S->top==(Stack_Size-1))
{
return(FALSE); /*栈已满*/
}
S->top++;
S->elem[S->top]=x;
return(TRUE);
}
int Print(SeqStack *S)
{
/* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */
if(S->top==-1) /*栈为空*/
return(FALSE);
else
{
for(int x=S->top;x>=0;x--)
{
cout<<S->elem[x]<<" ";
}
cout<<endl;
return(TRUE);
}
}
int Length(SeqStack *S)
{
return S->top+1;
}
int Pop(SeqStack *S)
{
/* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */
if(S->top==-1) /*栈为空*/
return(FALSE);
else
{
S->top--; /* 修改栈顶指针 */
return(TRUE);
}
}
void Clear(SeqStack *S)
{
S->top=-1;
free(S->elem);
}
int main()
{
int a;
SeqStack *S;
do
{
cout<<"1.建立顺序栈;"<<endl;
cout<<"2.顺序栈的push操作;"<<endl;
cout<<"3.从栈顶开始打印栈;"<<endl;
cout<<"4.获取顺序栈长度;"<<endl;
cout<<"5.顺序栈的pop操作;"<<endl;
cout<<"6.清空顺序栈;"<<endl;
cout<<"7.结束程序"<<endl;
cin>>a;
if(a==1)
{
InitStack(S);
system("CLS");
}
else if(a==2)
{
int n;
cout<<"请输入push的次数"<<endl;
cin>>n;
int x[n];
cout<<"请依次输入push的数值"<<endl;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int i=1;i<=n;i++)
{
Push(S,x[i-1]);
}
system("CLS");
}
else if(a==3)
{
Print(S);
}
else if(a==4)
{
cout<<Length(S)<<endl;
}
else if(a==5)
{
int n;
cout<<"请输入pop的次数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
Pop(S);
}
system("CLS");
}
else if(a==6)
{
Clear(S);
system("CLS");
}
}
while(a!=7);
cout<<"班级:计21-2班 姓名:沈润晨 学号:214010219"<<endl;
return 0;
}
//栈的链式表示及操作
#include<iostream>
#include<malloc.h>
#include<conio.h>
#include<windows.h>
using namespace std;
typedef struct LinkStackNode
{
int data;
struct LinkStackNode* next;
}LinkStackNode;
typedef struct{
LinkStackNode *top;//指针域
LinkStackNode *head;
}LinkStack;
void InitStack(LinkStack &S)
{
S.head=(LinkStackNode *)malloc(sizeof(LinkStackNode)*100);
S.head->next = NULL;
S.top = S.head;//初试栈为空
}
int Push(LinkStack S,int x)
{
/* 将数据元素x压入栈top中 */
LinkStackNode *temp;
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
if(temp==NULL)
return(FALSE); /* 申请空间失败 */
temp->data=x;
temp->next=S.top->next;
S.top->next=temp; /* 修改当前栈顶指针 */
return(TRUE);
}
int Print(LinkStack S)
{
LinkStackNode *temp;
temp=S.top->next;
if(temp==NULL) /*栈为空*/
return(FALSE);
while(temp!=NULL)
{
cout<<temp->data<<" ";
temp=temp->next;
}
cout<<endl;
return(TRUE);
}
int Length(LinkStack S)
{
int n=0;
LinkStackNode *temp;
temp=S.top->next;
while(temp!=NULL)
{
n++;
temp=temp->next;
}
return n;
}
int Pop(LinkStack S)
{
/* 将栈top的栈顶元素弹出 */
LinkStackNode *temp;
temp=S.top->next;
if(temp==NULL) /*栈为空*/
return(FALSE);
S.top->next=temp->next;
free(temp); /* 释放存储空间 */
return(TRUE);
}
void Clear(LinkStack S)
{
S.top->next=NULL;
free(S.head);
}
int main()
{
int a;
LinkStack S;
do
{
cout<<"1.建立链式栈;"<<endl;
cout<<"2.链式栈的push操作;"<<endl;
cout<<"3.从栈顶开始打印栈;"<<endl;
cout<<"4.获取链式栈长度;"<<endl;
cout<<"5.链式栈的pop操作;"<<endl;
cout<<"6.清空链式栈;"<<endl;
cout<<"7.结束程序"<<endl;
cin>>a;
if(a==1)
{
InitStack(S);
system("CLS");
}
else if(a==2)
{
int n;
cout<<"请输入push的次数"<<endl;
cin>>n;
int x[n];
cout<<"请依次输入push的数值"<<endl;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int i=1;i<=n;i++)
{
Push(S,x[i-1]);
}
system("CLS");
}
else if(a==3)
{
Print(S);
}
else if(a==4)
{
cout<<Length(S)<<endl;
}
else if(a==5)
{
int n;
cout<<"请输入pop的次数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
Pop(S);
}
system("CLS");
}
else if(a==6)
{
Clear(S);
system("CLS");
}
}
while(a!=7);
cout<<"班级:计21-2班 姓名:沈润晨 学号:214010219"<<endl;
return 0;
}
//队列的链式表示和操作
#include<iostream>
#include<malloc.h>
#include<conio.h>
#include<windows.h>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}LinkQueueNode;
typedef struct
{
LinkQueueNode* front;
LinkQueueNode* rear;
}LinkQueue;
int InitQueue(LinkQueue *Q)
{
/* 将Q初始化为一个空的链队列 */
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL)
{
Q->rear=Q->front;
Q->front->next=NULL;
return(TRUE);
}
else
return(FALSE); /* 溢出!*/
}
int JudgeQueue(LinkQueue *Q)
{
if(Q->front==Q->rear)
{
cout<<"栈为空"<<endl;
return 0;
}
else
{
cout<<"栈不为空"<<endl;
}
}
int EnterQueue(LinkQueue *Q,int x)
{
/* 将数据元素x插入到队列Q中 */
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return(TRUE);
}
else
return(FALSE); /* 溢出!*/
}
int DeleteQueue(LinkQueue *Q)
{
/* 将队列Q的队头元素出队 */
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FALSE);
p=Q->front->next;
Q->front->next=p->next; /* 队头元素p出队 */
if(Q->rear==p) /* 如果队中只有一个元素p,则p出队后成为空队 */
Q->rear=Q->front;
free(p); /* 释放存储空间 */
return(TRUE);
}
void ClearQueue(LinkQueue *Q)
{
Q->front==Q->rear;
free(Q->front);
}
int main()
{
int a;
LinkQueue S;
do
{
cout<<"1.初始化队列"<<endl;
cout<<"2.链判断队列是否为空 "<<endl;
cout<<"3.入队操作"<<endl;
cout<<"4.出队操作"<<endl;
cout<<"5.清空队列"<<endl;
cout<<"6.结束程序"<<endl;
cin>>a;
if(a==1)
{
InitQueue(&S);
system("CLS");
}
else if(a==2)
{
JudgeQueue(&S);
}
else if(a==3)
{
int n;
cout<<"请输入入队的次数"<<endl;
cin>>n;
int x[n];
cout<<"请依次输入入队的数值"<<endl;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int i=1;i<=n;i++)
{
EnterQueue(&S,x[i-1]);
}
system("CLS");
}
else if(a==4)
{
int n;
cout<<"请输入出队的次数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
DeleteQueue(&S);
}
system("CLS");
}
else if(a==5)
{
ClearQueue(&S);
system("CLS");
}
}
while(a!=6);
cout<<"班级:计21-2班 姓名:沈润晨 学号:214010219"<<endl;
return 0;
}