用C语言定义栈,分别用函数实现下列功能:
{
- 初始化栈;
- 进栈运算:实现元素的进栈运算;
- 退栈运算:实现元素的退栈运算;
- 读栈顶元素运算;
- 栈的判空判满运算:判断一个栈是空还是满;
}
正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。
话不多说,直接上代码:
#include<stdio.h>
#define stack_size 10//定义栈空间的大小
/********************定义栈**************************/
struct stack{
int data[stack_size];//用于保存栈的数据
int top;//用于保存栈顶位置,在空栈时位置top为-1
};
/********************初始化栈*********************/
void initstack(struct stack* stack){
stack->top = -1;
}
/********************判断栈是否为空*******************/
int judgeempty(struct stack* stack){
return(stack->top == -1) ? 1 : 0;//三目运算符,如果top指针为-1则返回1,否则返回0
}
/********************判断栈是否已满*******************/
int judgefull(struct stack* stack){
return(stack->top == stack_size - 1) ? 1 : 0;//三目运算符,如果top指针为栈空间最大值-1则返回1,否则返回0
}
/********************入栈**************************/
int insert(struct stack* stack,int value){
void output(struct stack* stack);
if (judgefull(stack)){//如果返回值为1,则栈已满,执行返回操作,反之则执行下一步操作
printf("栈空间已满,请使用出栈操作以释放空间\n");
return 0;
}
stack->data[++stack->top] = value;
return 1;
}
/********************出栈**************************/
int delestack(struct stack* stack){
if (judgeempty(stack)){//如果返回值为1,则栈空,执行返回操作,反之则执行下一步操作
printf("栈内数据为空,请先入栈\n!");
return 0;
}
--stack->top;
return 1;
}
/********************读栈顶元素运算******************/
int gettop(struct stack* stack){
int value;
if (judgeempty(stack)){
printf("栈内数据为空,请先入栈\n!");
}
value = stack->data[stack->top];
return value;
}
/*****************输出栈内的全部数据***************/
void output(struct stack* stack){
int i;
if (judgeempty(stack)){
printf("栈内数据为空,请先入栈\n!");
return;
}
printf("当前栈内的所有数据如下:\n");
for (i = stack->top; i > -1; i--){
printf("\t|%d|\n", stack->data[i]);
}
system("pause");
system("cls");
}
/********************主测试程序********************/
int main()
{
int num,data,i;
struct stack stack;//初始化栈
initstack(&stack);
A: while (1)
{
printf("\t提示:系统已自动初始化栈\n\n");
printf("\t\t1.进栈运算\n\n");
printf("\t\t2.退栈运算\n\n");
printf("\t\t3.读栈顶元素运算\n\n");
printf("\t\t4.输出栈中全部数据\n\n");
printf("\t\t5.退出程序\n\n");
printf("请选择功能项,并按回车执行:");
scanf_s("%d", &num);
switch (num)
{
case 1: //进栈运算
{
printf("请输入要进栈的数据个数:\n");
scanf_s("%d", &num);
printf("请输入要插入的数据(用空格分开):");
for (i = 0; i < num; i++){
scanf_s("%d", &data);
insert(&stack, data);
}
printf("插入成功!\n");
output(&stack);
goto A;
}
case 2://删除节点
{
printf("请输入你要删除的节点数:\n");
scanf_s("%d", &data);
for (i = data; i > 0;i--)
delestack(&stack);
printf("删除成功!\n");
output(&stack);
goto A;
}
case 3://读取栈顶操作
{
data=gettop(&stack);
printf("栈顶元素为:%d\n",data);
system("pause");
system("cls");
goto A;
}
case 4://输出栈中全部数据
{
output(&stack);
goto A;
}
case 5://退出程序
{
system("cls");
printf("******************>>>>退出成功!");
return;
}
}
}
}