首页 > 其他分享 >堆栈实现

堆栈实现

时间:2024-10-01 21:00:20浏览次数:3  
标签:return 实现 top int printf 堆栈 data

1、用数组实现堆栈

#include <stdio.h>
#include <stdlib.h>
#define MAXSTACK 100 /*定义堆栈的最大容量*/

int stack[MAXSTACK];/*堆栈的数组说明*/
int top=-1;/*堆栈的顶端*/
/*判断是否为空堆栈*/
int isEmpty() 
{
    if(top==-1) return 1;
    else return 0;
}
/*将指定的数据压入堆栈*/
int push(int data)
{
    if(top>=MAXSTACK)
    {
       printf("堆栈已满,无法再压入\n");
       return 0; 
    }
    else
    {
       stack[++top]=data; /*将数据压入堆栈*/
       return 1;
        
    }
}
/*从堆栈弹出数据*/
int pop()
{
    if(isEmpty()) /*判断堆栈是否为空,如果是,则返回-1*/
       return -1;
    else
       return stack[top--]; /*先从堆栈弹出数据,再将堆栈指针往下移*/
}
/*主程序*/
int main()
{
    int value;
    int i;
    do
     {
       printf("To push data into the stack, please enter 1; to pop data from the stack, enter 0; to stop the operation, enter -1.\r\n");
       scanf("%d",&i);
       if(i==-1)
         break;
       else if (i==1)
       { 
        printf("intput number:"); 
        scanf("%d",&value);
        push(value);
       }
       else if(i==0)
        printf("The data popped from the stack is %d\r\n",pop());
       } while(i!=-1);

    printf("============================\n");
    while(!isEmpty()) /*将数据陆续从堆栈顶端弹出*/
       printf("The order of data being popped from the stack is %d\r\n",pop()); 
    printf("==========================\n");
    system("pause");      
    return 0; 
}

 

2、用链表实现堆栈

#include <stdio.h>
#include <stdlib.h>

struct Node /*堆栈链表节点的声明*/
{
   int data; /*堆栈数据的声明*/
   struct Node *next;/*堆栈中用来指向下一个节点的指针*/
};
typedef struct Node Stack_Node;/*定义堆栈中节点的新数据类型*/
typedef Stack_Node *Linked_Stack;/*定义链表堆栈的新数据类型*/
Linked_Stack top=NULL;/*指向堆栈顶端的指针*/
int isEmpty();
int pop();
void push(int data);
/*判断是否为空堆栈*/

/*主程序*/
int main()
{
    int value;
    int i;
    
    do
     {
       printf("要把数据压入堆栈,请输入1,要从堆栈弹出数据则输入0,停止操作则输入-1: ");
       scanf("%d",&i);
       if(i==-1)
         break;
       else if (i==1)
       { 
        printf("请输入数据:"); 
        scanf("%d",&value);
        push(value);
       }
       else if(i==0)
        printf("弹出的数据为%d\n",pop());
       } while(i!=-1);

    printf("============================\n");
    while(!isEmpty()) /*将数据陆续从堆栈顶端弹出*/
       printf("堆栈弹出数据的顺序为:%d\n",pop()); 
    printf("==========================\n");
    
    system("pause");      
    return 0; 
}
int isEmpty() 
{
    if(top==NULL) return 1;
    else return 0;
}
/*将指定的数据压入堆栈*/
void push(int data)
{
    Linked_Stack new_add_node; /*新加入节点的指针*/
    /*给新节点分配内存*/
    new_add_node=(Linked_Stack)malloc(sizeof(Stack_Node));
    new_add_node->data=data;/*将传入的值指定为节点的内容*/
    new_add_node->next=top;/*将新节点指向堆栈的顶端*/
    top=new_add_node;/*新节点成为堆栈的顶端*/
}
/*从堆栈弹出数据*/
int pop()
{
    Linked_Stack ptr; /*指向堆栈顶端的指针*/
    int temp;
    if(isEmpty()) /*判断堆栈是否为空,如果是,则传回-1*/
    {
       printf("===目前为空堆栈===\n");
       return -1;
    }
    else
    {
        ptr=top;/*指向堆栈的顶端*/
        top=top->next;/*将堆栈顶端的指针指向下一个节点*/
        temp=ptr->data;/*从堆栈弹出的数据*/
        free(ptr);/*将节点占用的内存释放*/
        return temp;/*将从堆栈弹出的数据返回给主程序*/
    }
}

 

标签:return,实现,top,int,printf,堆栈,data
From: https://www.cnblogs.com/czy363/p/18443326

相关文章