顺序栈操作验证
实验目的
- 掌握栈的顺序存储结构;
- 验证栈的操作特性;
- 掌握顺序栈的基本操作实现方法。
实验内容
- 建立含有若干个元素的顺序栈;
- 对已建立的顺序栈实现入栈、出栈、判栈空和判栈满等基本操作。
实验步骤
- 用c语言定义一个栈结构体数据结构,结构体内两个参数,数据区Data和top栈顶指针,代码如下
/** 栈模型 */
typedef struct {
int Data[MAXSTACK];
int top;
} SqStack, *StackLink;
2、定义运行循环、初始化栈、判空栈、进栈、出栈、至空栈、遍历栈函数声明
/** 运行循环 */
int runloop(void);
/** 初始化栈 */
StackLink init(void);
/** 判空栈 返回值 1 为空栈 0为非空栈 */
int isEmpty(StackLink stack);
/** 进栈 */
void push(StackLink stack, int data);
/** 出栈 */
int pop(StackLink stack);
/** 至空栈 */
void clearStack(StackLink stack);
/** 遍历栈 */
void next(StackLink stack);
3、实现运行循环函数,通过控制台输入进行指定操作
int runloop(void) {
StackLink link = init();
int flag = 0;
printf("\n请选择: -1 退出\n 1 元素进栈\n 2 元素出栈\n 3 遍历所有栈元素\n 4 清空栈\n");
scanf("%d", &flag);
do {
switch (flag) {
case 1: {
int a = 0;
printf("\n请输入进栈元素:");
scanf("%d",&a);
push(link, a);
break;
}
case 2: {
int a = pop(link);
printf(">>出栈元素:%d",a);
break;
}
case 3: {
next(link);
break;
}
case 4: {
clearStack(link);
break;
}
default:
printf("输入有误");
break;
}
printf("\n请选择:\n -1 退出\n 1 元素进栈\n 2 元素出栈\n 3 遍历所有栈元素\n 4 清空栈\n");
scanf("%d", &flag);
} while (flag != -1);
return flag;
}
4、实现初始化栈 init
StackLink init(void) {
StackLink stack = (StackLink)malloc(sizeof(SqStack));
stack->top = -1;
return stack;
}
5、实现判空栈函数 isEmpty
int isEmpty(StackLink stack) {
return stack->top == -1 ? 1 : 0;
}
5、实现元素进栈函数 push
void push(StackLink stack, int data) {
if (stack->top >= MAXSTACK) {
err(1, "栈已满");
}
stack->top = stack->top + 1;
stack->Data[stack->top] = data;
}
6、实现元素出栈方法pop
int pop(StackLink stack) {
if (stack->top <= -1) {
err(1, "栈已空");
}
int a = stack->Data[stack->top];
stack->top = stack->top - 1;
return a;
}
7、实现清空栈方法 clearStack
void clearStack(StackLink stack) {
stack->top = -1;
}
7、实现遍历栈方法 next
void next(StackLink stack) {
int i = stack->top;
while (i>-1) {
printf(">>%d ",stack->Data[i]);
--i;
}
}
8、在main函数中实现调用
int main(int argc, const char * argv[]) {
return runloop();
}
9、运行程序,测试结果
第一次运行
请选择: -1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:2
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:3
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:4
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:10
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
3
>>10 >>4 >>3 >>2
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
4
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
3
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
第二次运行
请选择: -1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:50
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:50
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
1
请输入进栈元素:20
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
3
>>20 >>50 >>50
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
2
>>出栈元素:20
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
2
>>出栈元素:50
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
2
>>出栈元素:50
请选择:
-1 退出
1 元素进栈
2 元素出栈
3 遍历所有栈元素
4 清空栈
2
栈结构: 栈已空: Undefined error: 0
网友评论