栈stack
1、定义:插或删只能在栈顶的受限的线性表
2、基本操作
1)入栈push
2)出栈pop
3、栈的存储结构
1)顺序栈
2)链式栈
4、顺序栈结构体定义
#define stacksize 100
typedef struct {
int data[stacksize];
int top; // 栈顶计数器
}seqstack;
5、顺序栈算法
#include<stdio.h>
#include<stdlib.h>
//栈的结构体定义
//顺序栈
#define stacksize 100
typedef struct {
int data[stacksize];
int top;
}seqstack;
//初始化
/*
1、开内存
2、sq->top=-1
*/
seqstack* sq;
void Intistack() {
sq = (seqstack*)malloc(sizeof(seqstack));
sq->top = -1;
}
//进栈
int push(int x) {
if (sq->top == stacksize - 1)
return 0;
sq->top++;
sq->data[sq->top] = x;
return 1;
}
//出栈
int pop() {
if (sq->top == -1)
return 0;
sq->top--;
return 1;
}
//展示
void show() {
while (sq->top != -1) {
printf("%d\t", sq->data[sq->top]);
sq->top--;
}
}
//主菜单
void menu() {
int choose, x;
printf("\n请选择操作:\n 1、入栈\n 2、出栈\n 3、展示栈中内容\n 4、退出\n");
scanf("%d", &choose);
switch (choose) {
case 1:
printf("请输入元素!!!\n");
scanf("%d", &x);
push(x);
menu();
break;
case 2:
pop();
menu();
break;
case 3:
show();
menu();
break;
case 4:
exit(0);
break;
default:
printf("无效选项,请重新选择\n");
menu();
break;
}
}
//主函数
int main() {
Intistack();
menu();
return 0;
}
6、 栈的链式存储结构(栈的链式实现)
// ls为栈顶指针,长得很像链表,但是无头
// ls -> ^ 空栈
7、链式栈算法
//栈的链式实现
#include <iostream>
//链栈结构体定义
typedef struct node {
int data;
struct node* next;
}LinkStack;
//栈的初始化
LinkStack* ls = NULL;
//入栈push
int push(int x) {
LinkStack* P = (LinkStack*)malloc(sizeof(LinkStack)); //开内存
P->data = x; // 入栈
P->next = ls; // 连接
ls = P; //ls向上移动
return 1;
}
//出栈pop
int pop() {
LinkStack* P = ls;
if (ls == NULL) // 判断是否为空
return 0;
ls = P->next; // ls向下移一个单位
free(P);
return 1;
}
//栈中元素展出
int show() {
LinkStack* P = ls;
while (P!= NULL) {
printf("%d\t", P->data);
P = P->next; //向上移动一个单位
}
return 0;
}
void meau() {
int x;
int choose;
printf("请你选择操作:\n 1、入栈\n 2、出栈\n 3、查看栈中元素\n 4、退出\n");
scanf("%d", &choose);
switch (choose)
{
case 1:
printf("Please input elem!\n");
scanf("%d", &x);
push(x);
meau();
break;
case 2:
pop();
meau();
break;
case 3:
show();
printf("\n");
meau();
break;
case 4:
exit(0);
break;
default:
printf("ERROR!\n");
meau();
break;
}
}
int main() {
meau();
return 0;
}