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