/* 1 栈的顺序结构实现 */
#include <stdio.h>
#include <stdbool.h>
typedef int TYPE; //定义栈元素类型
#define SIZE 5 //栈空间大小
//声明顺序栈结构体
typedef struct
{
TYPE data[SIZE];//记录栈中元素值
int length; //记录栈的长度
}seqStack;
void init(seqStack*);//初始化
void push(seqStack*,TYPE);//入栈
TYPE pop(seqStack*);//出栈
void clear(seqStack*);//清空
bool isEmpty(seqStack*);//判断栈是否为空
bool isFull(seqStack*);//判断栈是否已满
int length(seqStack);//返回栈的大小
void ergodic(seqStack*);//遍历栈中元素
int search(seqStack*,TYPE);//搜索,返回是第几个元素,失败则返回-1
int main()
{
seqStack nodes;
//栈初始化
init(&nodes);
//元素入栈
printf("输入要入栈的元素个数:");
int count = 0;
scanf("%d",&count);
TYPE elem;
printf("输入%d个入栈元素:",count);
if(count<=SIZE-length(nodes))
{
while(count)
{
scanf("%d",&elem);
push(&nodes,elem);
count--;
}
}
else
{
printf("\n输入数据过多或者栈已满,入栈失败\n");
}
//元素出栈
if(!isEmpty(&nodes))
printf("出栈元素是:%d\n",pop(&nodes));
else
printf("栈已空,出栈失败!\n");
//搜索元素
printf("输入要搜索的元素:");
scanf("%d",&elem);
int number = search(&nodes,elem);
if(number>0)
printf("找到元素%d是第%d个元素\n",elem,number);
else
printf("元素%d不存在\n",elem);
//遍历栈
printf("遍历栈:");
ergodic(&nodes);
//清空栈
clear(&nodes);
printf("清空后遍历:");
ergodic(&nodes);
return 0;
}
//栈初始化
void init(seqStack* stack)
{
stack->length = 0;
}
//入栈操作
void push(seqStack* stack,TYPE e)
{
if(!isFull(stack))
{
stack->data[stack->length] = e;
stack->length++;
}
//判断上面最后一个元素插入后,栈满则清空缓冲区
//不能用else分支,必须用isFull再判断一次
if(isFull(stack))
{
scanf("%*[^\n]");
scanf("%*c");
}
}
//出栈操作
TYPE pop(seqStack* stack)
{
stack->length--;
return stack->data[stack->length];
}
//判断是否为空
bool isEmpty(seqStack* stack)
{
return stack->length==0;
}
//判断是否为满
bool isFull(seqStack* stack)
{
return stack->length>=SIZE;
}
//返回栈的长度
int length(seqStack stack)
{
return stack.length;
}
//遍历栈
void ergodic(seqStack* stack)
{
for(int i=0;i<stack->length;i++)
printf("%d ",stack->data[i]);
printf("\n");
}
//搜索栈中元素,返回元素首次在栈中出现的位置
int search(seqStack* stack,TYPE e)
{
int pos=0;
for(int i=0;i<stack->length;i++)
{
if(stack->data[i]==e)
{
pos=i+1;
break;
}
}
return pos;
}
//清空栈
void clear(seqStack* stack)
{
stack->length = 0;
}
栈的顺序结构实现
最新推荐文章于 2022-04-22 23:35:42 发布