C語言-資料結構-建立棧
阿新 • • 發佈:2019-02-13
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
///建立棧
typedef int data;
typedef struct
{
data *base; //棧底
data *top; //棧頂
int stacksize; //棧大小
}stack;
//建立棧(初始化)
void init(stack *s)
{
//給base開闢記憶體
s->base = (stack*)malloc(maxsize*sizeof(stack));
if(!s->base)
{
printf("error!");
exit(1);
}
s->top = s->base;
s->stacksize=maxsize;
}
//判斷空棧 空/1
int null(stack *s)
{
return s->top == s->base;
}
//判斷滿棧
int full(stack *s)
{
return s->top - s->base == maxsize;
}
//進棧
void inpush(stack *s,data x)
{
if((full(s)))
{
printf("full"); //上溢
exit(1);
}
//將棧頂指標加一後再入棧;
*((s->top)++) = x;
}
//出棧
void pop(stack *s)
{
if(null(s))
{
printf("null"); //下溢
exit(1);
}
//棧頂指標-1
--s->top;
}
//取棧頂元素
/*
data top(stack *s)
{
if(null(s))
{
printf("null");
exit(1);
}
return *(s->top-1);
}*/
//輸出元素
void output(stack *s)
{
while(!null(s))
{
pop(s);
printf("%d ",*s->top);
}
}
//輸入元素
void input(stack *s)
{
int i,n;
data x;
//printf("please enter index:");
//scanf("%d",&n);
printf("please input element:");
//for(i=0;i<n;i++)
for(i=1;;i++)
{
scanf("%d",&x);
inpush(s,x);
if(getchar()=='\n')
break;
}
}
int main()
{
stack p,*s=&p;
init(s);//建立
input(s); //輸入進棧內容
output(s); //輸出出棧內容
return 0;
}
#include <stdlib.h>
#define maxsize 100
///建立棧
typedef int data;
typedef struct
{
data *base; //棧底
data *top; //棧頂
int stacksize; //棧大小
}stack;
//建立棧(初始化)
void init(stack *s)
{
//給base開闢記憶體
s->base = (stack*)malloc(maxsize*sizeof(stack));
if(!s->base)
{
printf("error!");
exit(1);
}
s->top = s->base;
s->stacksize=maxsize;
}
//判斷空棧 空/1
int null(stack *s)
{
return s->top == s->base;
}
//判斷滿棧
int full(stack *s)
{
return s->top - s->base == maxsize;
}
//進棧
void inpush(stack *s,data x)
{
if((full(s)))
{
printf("full"); //上溢
exit(1);
}
//將棧頂指標加一後再入棧;
*((s->top)++) = x;
}
//出棧
void pop(stack *s)
{
if(null(s))
{
printf("null"); //下溢
exit(1);
}
//棧頂指標-1
--s->top;
}
//取棧頂元素
/*
data top(stack *s)
{
if(null(s))
{
printf("null");
exit(1);
}
return *(s->top-1);
}*/
//輸出元素
void output(stack *s)
{
while(!null(s))
{
pop(s);
printf("%d ",*s->top);
}
}
//輸入元素
void input(stack *s)
{
int i,n;
data x;
//printf("please enter index:");
//scanf("%d",&n);
printf("please input element:");
//for(i=0;i<n;i++)
for(i=1;;i++)
{
scanf("%d",&x);
inpush(s,x);
if(getchar()=='\n')
break;
}
}
int main()
{
stack p,*s=&p;
init(s);//建立
input(s); //輸入進棧內容
output(s); //輸出出棧內容
return 0;
}