=====================================================================================================================
//用静态数组实现堆栈
#include<stdio.h>
#include<assert.h>
#define STACK_TYPE int//栈里面所存数据的类型
#define STACK_SIZE 100//栈的大小
static STACK_TYPE stack[STACK_SIZE];
static int top_element = -1;//用top_element来标记栈顶元素的下标
void push(STACK_TYPE value);//压栈操作
void pop(void);//弹出栈顶的一个值,并将其丢弃
STACK_TYPE top(void);//返回栈顶的一个值,并不对栈进行修改
int is_empty(void);//如果栈为空,返回TRUE,否则返回FALSE
int is_full(void);//如果栈为满,返回TRUE,否则返回FALSE
int main(){
int i=0,k=0;
printf("please input 1 number:\n");
scanf("%d",&i);
while(i){ //实现将十进制转换为八进制//还有一道题为十转十六
k=i%8;
push(k);
i=i/8;
}
while(!is_empty()){ //如果栈不为空,那么就输出栈顶元素,并出栈
printf("%d\n",top());
pop(); //出栈
}
return 0;
}
void push(STACK_TYPE value){
assert( !is_full() );//断言堆栈不是满的
top_element += 1;//先加一,再压栈
stack[ top_element ] = value;
}
void pop(void){
assert( !is_empty() );
top_element -= 1; //出栈
}
STACK_TYPE top(void){
assert( !is_empty() );
return stack[ top_element]; //访问栈顶值
}
int is_empty(void){
return top_element == -1; //栈是否为空
}
int is_full(void){
return top_element ==STACK_SIZE-1; //栈满了没有?
}
===========================================================================================================================
//用链表实现堆栈
//单链表实现椎栈,在头插入与删除元素
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define STACK_TYPE int //椎栈中的元素
typedef struct shi_to_ba{
int num;
struct shi_to_ba *next;
}STACK;
void push(STACK_TYPE value);
void pop(void);
STACK_TYPE top(void);
int is_empty();
static STACK *head=NULL;//椎栈头指针,
int main(){
int i=0,k=0;
printf("please input 1 integer:\n");
scanf("%d",&i);
while(i){
k=i%8;
push(k);
i=i/8;
}
while(!is_empty()){
printf("%d\n",top());
pop();
}
return 0;
}
void push(STACK_TYPE value){
STACK *tmp;
tmp=(STACK *)malloc(sizeof(STACK));
Assert(tmp != NULL);
tmp->num=value;
/*
if(head==NULL){
tmp->next=NULL; //右边等价tmp->next = head;
}else{
tmp->next=head;
}
*/
head=tmp;
}
void pop(void){
STACK *tmp=head;
assert(!is_empty());
head=head->next;
free(tmp);
}
STACK_TYPE top(void){
assert(!is_empty());
return head->num;
}
int is_empty(){
return head==NULL;
}
两种堆栈实现
最新推荐文章于 2024-07-25 21:56:38 发布