堆栈的基本操作
结构
#define MaxSize 50
typedef int Elemtype;
typedef struct{
Elemtype data[MaxSize];
int top;
}SqStack;
typedef struct Linknode{
Elemtype data;
struct Linknode *next;
}*LiStack;
初始化
void InitStack(SqStack &s){
s.top=-1;
}
判空
bool StackEmpty(SqStack s)
{
if(s.top==-1)
return true;
else
return false;
}
进栈
bool Push(SqStack &s,Elemtype x)
{
if(s.top==MaxSize-1)
return false;
s.data[++s.top]=x;
return true;
}
出栈
bool Pop(SqStack &s,Elemtype &x)
{
if(s.top==-1)
return false;
x=s.data[s.top--];
return true;
}
读栈顶元素
bool GetTop(SqStack s,Elemtype &x){
if(s.top==-1)
return false;
x=s.data[s.top];
return true;
}
循环队列的基本操作
结构
#define maxsize 50
typedef int ElemType;
typedef struct{
ElemType data[maxsize];
int front,rear;
}SqQueue;
初始化
void InitQueue(SqQueue &Q)
{
Q.rear=Q.front=0;
}
判空
bool IsEmpty(SqQueue Q)
{
if(Q.front==Q.rear)return true;
else return false;
}
入队
bool EnQueue(SqQueue &Q,ElemType x)
{
if((Q.rear+1)%maxsize==Q.front) return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%maxsize;
return true;
}
出队
bool DeQueue(SqQueue &Q,ElemType &x)
{
if(Q.rear==Q.front)return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%maxsize;
return true;
}
链式队列的基本操作
结构
typedef int ElemType;
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
初始化
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
判空
bool IsEmpty(LinkQueue Q)
{
if(Q.front==Q.rear)return true;
else return false;
}
入队
void EnQueue(LinkQueue &Q,ElemType x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
出队
bool DeQueue(LinkQueue &Q,ElemType &x)
{
if(Q.front==Q.rear)return false;
LinkNode *p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return true;
}