• 栈,队列的C语言实现


    栈的C语言实现
    队列的C语言实现

    栈:后进先出  允许插入和删除的一端叫栈顶top  不允许的一端叫栈底bottom
    主要操作:进栈、出栈、判断栈满和栈空
    有两个现成的函数 int push(int s[],int x,int *ptop), int pop(int s[],int *py,int *ptop)  直接拿过来用就行   要压入的栈空间 要进栈的数 栈顶指针

    队列:先进先出  允许插入的叫队尾rear  允许数据离开的叫队头front
    主要操作:入队、出队、判断队满和队空
    有两个现成的函数  int EnQueue(int *Q,int x,int *pf,int *pr)    pf:队头指针
    直接拿过来用就行  int DeQueue(int *Q,int *py,int *pf,int *pr)  pr:队尾指针
                      Q:要进入的队空间  x:要进入队的数 py:要出队的数


    (a) 线性队列
    (b) 循环队列
    队头:
        front
    队尾:
        rear
    队满条件:
        (rear+1)%MAX=front
    队空条件:
        rear=front
    入队:rear = (rear+1)%MAX
    出队:front = (front+1)%MAX

    习题答案
    1、
    //进栈算法
    #include "stdio.h"
    #define stacksize 100            /*定义stacksize为常数100 */

    int push(int s[],int x,int *ptop)
    {    
        int top;
         top=*ptop;                    //ptop是指针变量;*ptop获得实际栈顶指针
        if ( top==stacksize )        //栈满
         {
            printf("overflow\n");
            return 0;
        }
        else
        {
            s[top]=x;
            top++;
            *ptop=top;                //实际栈顶指针加1,返回到调用函数处
            return 1;   
        }
    }

    int pop(int s[],int *py,int *ptop)
    {
        int top;
        top=*ptop;                    //ptop是指针变量;*ptop获得实际栈顶指针
        if (top==0)                    //栈空    
        {
           printf("stack empty\n");
           return 0;
        }
       else
       {    
           --top;
           *py=s[top];                //实际栈顶指针减1,返回到调用函数处
           *ptop=top;    
            return 1;
       }
    }


    int main()
    {
        static int s[stacksize];
        int top=0,result,y;
        int i;

        result=push(s,11,&top);        //将11压进栈中
        result=push(s,22,&top);        //将22压进栈中
        result=push(s,33,&top);        //将33压进栈中
        printf("top=%d\n",top);

        for (i=0;i<3;i++)
        {
            result=pop(s,&y,&top);    //从栈中弹出
            printf("top=%d,y=%d\n",top,y);
        }

    }

    2、
    //循环队列中加入一个元素的算法:
    //设Q[MAX]表示循环队列

    #define MAX 7
    #include "stdio.h"

    int EnQueue(int *Q,int x,int *pf,int *pr)
    {
        int front,rear;
        front = *pf;
        rear=*pr;
        if ( (rear+1) % MAX == front )     //判断队满
            return 0;                
        else
        {
            Q[rear]=x;                    //将数据存入队列
            rear = ( rear+1 ) % MAX;    //队尾指针移位
             *pr=rear;                    //保存队尾指针
             return 1;
        }
    }


    int DeQueue(int *Q,int *py,int *pf,int *pr)
    {
        int front,rear;
        front=*pf;
        rear=*pr;
        if (front==rear)                //判断队空
            return 0;                        
        else
        {
            *py=Q[front];                //将数据读出
            front=(front+1) % MAX;        //队头指针移动
            *pf=front;                    //保存队头指针
            return 1;  
        }
    }

    int main()
    {
        static int s[MAX];
        
        int rear = 0,front = 0;
        int b=0;
        EnQueue(s,11,&front,&rear);        //入队操作
        printf("front=%d,rear=%d\n",front,rear);
        EnQueue(s,12,&front,&rear);        //入队操作
        printf("front=%d,rear=%d\n",front,rear);
        EnQueue(s,13,&front,&rear);        //入队操作
        printf("front=%d,rear=%d\n",front,rear);
        printf("***********\n");
        DeQueue(s,&b,&front,&rear);        //出队操作
        printf("front=%d,rear=%d\n",front,rear);
        printf("**%d**\n",b);
        DeQueue(s,&b,&front,&rear);        //出队操作
        printf("front=%d,rear=%d\n",front,rear);
        printf("**%d**\n",b);
        DeQueue(s,&b,&front,&rear);        //出队操作
        printf("front=%d,rear=%d\n",front,rear);
        printf("**%d**\n",b);
    }

  • 相关阅读:
    Oracle创建用户并赋予权限
    Oracle查询表空间使用情况
    Oracle更改数据库文件大小、实时增加文件容量
    Oracle查询数据中占用空间最大的表
    Oracle存储包存储及案例
    Oracle包Package调用Package
    Oracle存储过程Procedure语法及案例
    Oracle存储过程function语法及案例
    Oracle常用语法
    Oracle游标循环更新数据案例
  • 原文地址:https://www.cnblogs.com/qinkai/p/2429600.html
Copyright © 2020-2023  润新知