掌握栈的基本操作实现方法

数据结构第四次实验
编写一个程序实现顺序栈的各种基本运算.
(1) 初始化顺序栈
(2) 判断栈空
(3) 判断栈满
(4)入栈
(5) 遍历顺序栈
(6) 出栈
(7) 取栈顶元素.
注意: 对顺序栈的操作主要是对栈顶指针和以栈顶指针为下标的数组的操作,注意栈的状态。在入栈时栈不能为满, 出栈时栈不能为空.

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct sqstack
{
   int data[MAXSIZE];
   int top;
}sqstack; //顺序栈结构体定义

//顺序栈的初始化算法
void initseqstack(sqstack &st)
{st.top ==-1;
  }
//顺序栈判空算法
int emptystack(sqstack st)
{if(st.top ==-1)
return 1;
else 
return 0;
 }
//顺序栈栈满算法
int stackfull(sqstack &st)
{if(st.top ==MAXSIZE-1)
 return 1;
 else 
 return 0;
 }
//取顺序栈栈顶元素算法
int get_top(sqstack st)
{int x;
if(emptystack(st)){
	printf("empty");
}
else
{x=st.data[st.top];

}
return x;}
//顺序栈入栈操作算法
void push(sqstack &st,int e)
{ if(stackfull(st)){
	printf("full");
}
else 
{st.top ++;
st.data [st.top]=e;
}
 }
//顺序栈出栈算法
void pop(sqstack &st)
{if(emptystack(st)){
	printf("empty");
}
else
{printf("%3d",st.data[st.top]);
st.top --;
}
   }

//顺序栈创建算法
void createstack(sqstack &st)
{int i,n;
printf("输入N个整数:");
scanf("%d",&n);
for(i=0;i<n;i++){
	scanf("%d",&st.data[i]);//忘加&取地址
 
}
st.top=n-1;
 }
//顺序栈显示算法
void display(sqstack st)
{int i;
if(emptystack(st)){
	printf("empty");

}
else
for(i=st.top;i>=0;i--){
	printf("%3d",st.data [i]);
}
 }


main()
 { int x;
 sqstack s;
 printf("初始化一个栈\n");
     initseqstack(s); 
     createstack(s);
      printf("\n");
     display(s);
  printf("\n");
  printf("请输入需要入栈的元素值:");
  scanf("%d",&x);
  push(s,x);
  printf("\n");
     display( s);
     printf("调用出栈算法");
  pop(s);
 printf("\n");
  display( s);
 }

实顺序的基本算法包括初始化、入、出、取顶元素、遍历、置空等操作。下面是各种基本运算的算法: 1. 初始化操作:创建一个空,即将顶指针指向-1。 2. 入操作:将元素压入顶,即将顶指针加1,然后将元素存入该位置。 3. 出操作:将顶元素弹出,即将顶指针减1,然后返回该位置的元素。 4. 取顶元素操作:返回顶元素,即返回顶指针所指位置的元素。 5. 遍历操作:从底到顶依次输出中元素。 6. 置空操作:将清空,即将顶指针重置为-1。 下面是一个主程序的示例,它实现了上述基本运算: ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int top; } SequenStack; void Init_SequenStack(SequenStack* s) { s->top = -1; } void Push_SequenStack(SequenStack* s, int x) { if (s->top == MAXSIZE - 1) { printf("Stack overflow!\n"); exit(1); } s->top++; s->data[s->top] = x; } int Pop_SequenStack(SequenStack* s) { if (s->top == -1) { printf("Stack underflow!\n"); exit(1); } int x = s->data[s->top]; s->top--; return x; } int GetTop_SequenStack(SequenStack* s, int* x) { if (s->top == -1) { printf("Stack is empty!\n"); return 0; } *x = s->data[s->top]; return 1; } void Traverse_SequenStack(SequenStack* s) { if (s->top == -1) { printf("Stack is empty!\n"); return; } for (int i = 0; i <= s->top; i++) { printf("%d ", s->data[i]); } printf("\n"); } void Clear_SequenStack(SequenStack* s) { s->top = -1; } int main() { SequenStack s; Init_SequenStack(&s); Push_SequenStack(&s, 1); Push_SequenStack(&s, 2); Push_SequenStack(&s, 3); int x; GetTop_SequenStack(&s, &x); printf("Top element: %d\n", x); Traverse_SequenStack(&s); Pop_SequenStack(&s); Traverse_SequenStack(&s); Clear_SequenStack(&s); Traverse_SequenStack(&s); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值