栈和队列的线性表结构

1 篇文章 0 订阅
1 篇文章 0 订阅

栈和队列的线性表结构

只允许在表的一端进行插入删除线性表
LIFO

栈图片

主要操作:

  1. void InitStack(Stack& S);
  2. void Push(Stack& S, SElemType x);
  3. void Pop(Stack& S, SElemType& x);
  4. void GetTop(Stack& S, SElemType& x);
  5. int StackEmpty(Stack& S);
  6. int StackFull(Stack& S);
  7. int StackSize(Stack& S);

具体实现代码:(聪明如你,不用解释)

#define initSize 20
typedef int SElemType;
typedef struct{
    SElemType *elem;
    int maxSize, top;
}Stack;
void InitStack(Stack& S){
    S.elem = (SElemType*)malloc(initSize*sizeof(SElemType));
    if(S.elem == NULL) exit(1);
    S.maxSize = initSize;
    S.top = -1;
}
void Push(Stack& S, SElemType x){
    if(S.top == S.maxSize-1) return 0;
    S.elem[++S.top] = x;
    return 1;
}
void Pop(Stack& S, SElemType x){
    if(S.top == -1) return 0;
    x = S.elem[S.top--];
    return 1;
}
void GetTop(Stack& S, SElemType x){
    if(S.top == -1) return 0;
    x = S.elem[S.top];
    return 1;
}
void StackEmpty(Stack& S){
    return S.top == -1;
}
void StackFull(Stack& S){
    return S.top == S.maxSize;
}
void StackSize(Stack& S){
    return S.top + 1;
}

以上操作在c++STL有对应的实现,分别为:(#include<stack>)

  1. stack<SElemType> S
  2. push(x)
  3. pop()
  4. top()
  5. empty()
  6. size()

队列

允许在表的一端插入,在另一端删除线性表
FIFO

队列图片

主要操作:

  1. void InitQueue(Queue& Q);
  2. int EnQueue(Queue& Q, QElemType x);
  3. int DeQueue(Queue& Q, QElemType x);
  4. int GetFront(Queue& Q, QElemType x);
  5. int QueueEmpty(Queue& Q);
  6. int QueueFull(Queue& Q);
  7. int QueueSize(Queue& Q);

具体实现代码:

#define maxSize 20
typedef int QElemType;
typedef struct{
    QElemType elem[maxSize];
    int front, rear;
}Queue;
void InitQueue(Queue& Q){
    Q.front = Q.rear = 0;
}
int EnQueue(Queue& Q, QElemType x){
    if((Q.rear+1) % maxSize == Q.front) return 0;
    Q.elem[Q.rear] = x;
    Q.rear = (Q.rear+1) % maxSize;
    return 1;
}
int DeQueue(Queue& Q, QElemType x){
    if(Q.rear == Q.front) return 0;
    x = Q.elem[Q.rear];
    Q.front = (Q.front+1) % maxSize;
    return 1;
}
int GetFront(Queue& Q, QElemType x){
    if(Q.rear == Q.front) return 0;
    x = Q.elem[Q.front];
    return 1;
}
int QueueEmpty(Queue& Q){
    return Q.front == Q.rear;
}
int QueueFull(Queue& Q){
    return (Q.rear+1) % maxSize == Q.front;
}
int QueueSize(Queue& Q){
    return (Q.rear - Q.front + maxSize) % maxSize;
}

以上操作在c++STL有对应的实现,分别为:(#include<queue>)

  1. queue<QElemType> Q
  2. push(x)
  3. pop()
  4. front()
  5. empty()
  6. size()

结束语:

这个你说他重要吗,他不是特别重要
但是你说他不重要吗,他确实
其实知道它的底层原理了,会使用c++的STL就行了
看看就好
所有图片来自网络

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值