【数据结构】栈的基本操作与栈的应用-创新互联
栈
本文名称:【数据结构】栈的基本操作与栈的应用-创新互联
网页地址:http://cdiso.cn/article/ihohd.html
栈(Stack):插入和删除只在一端的线性表就是栈
成都创新互联公司不只是一家网站建设的网络公司;我们对营销、技术、服务都有自己独特见解,公司采取“创意+综合+营销”一体化的方式为您提供更专业的服务!我们经历的每一步也许不一定是最完美的,但每一步都有值得深思的意义。我们珍视每一份信任,关注我们的成都网站设计、成都网站制作质量和服务品质,在得到用户满意的同时,也能得到同行业的专业认可,能够为行业创新发展助力。未来将继续专注于技术创新,服务升级,满足企业一站式全网整合营销推广需求,让再小的品牌网站设计也能产生价值!结构:
栈底(base):不能进行插入和删除的一端就是栈底。
栈顶(top):可以插入删除的那一端就是栈顶。
栈顶(top):可以插入删除的那一端就是栈顶。
初始值:base = 0;top = 0;栈底的初始值即位置不会改变,每进栈一条数据,栈顶的位置都会发生改变,当没有数据时栈顶的初始位置为0;
进栈(插入数据)push:将新值插入到栈顶位置,同时栈顶改变一个位置
data[top] = A;
top ++;栈满:当栈顶的值等于栈的大长度时,说明栈满。
top == maxsize - 1出栈(删除)POP:往下改变栈顶的位置即可。
top --;出栈(删除)POP:往下改变栈顶的位置即可。
top --;
1.定义
struct Stack {int data[maxLength];
int base;
int top;
};
2.初始化
struct Stack * initStack() {struct Stack *s = (struct Stack *)malloc(sizeof(struct Stack));
s->base = 0;
s->top = s->base;
return s;
}
3.判断栈是否为空
int isNull(struct Stack *s) {if (s->base == s->top) {return 1;//空
}
else {return 0;
}
}
4.判断栈是否满
int isFull(struct Stack *s) {if (s->top == maxLength) {return 1;//满
}
else {return 0;
}
}
5.进栈
int push(struct Stack * s,int data) {s->data[s->top] = data;
s->top++;
}
6.出栈
int pop(struct Stack *s) {int data = s->data[s->top-1];
s->top--;
return data;
}
7.main函数测试
//程序入口
void main() {//初始化
struct Stack *s = initStack();
if (s!=NULL) {printf("--->>>初始化成功\n");
}
//判断栈是否为空
if (!isNull(s)) {printf("--->>>栈不为空\n");
}else {printf("--->>>栈为空\n");
}
//判断栈满
if (isFull(s)) {printf("--->>>栈满\n");
}
else {printf("--->>>栈不满\n");
}
//进栈
while (1) {if (isFull(s)) { printf("--->>>栈满,不允许继续插入\n");
}
int data;
printf("请输入进栈数据(0结束):");
scanf_s("%d",&data);
if (data == 0) { printf("--->>>输入结束\n");
break;
}
push(s,data);
}
//出栈
printf("出栈了一个数据:%d\n",pop(s));
}
补充:栈的应用- 进制转换
int hexadecimalConversion(struct Stack * s,int num,int intoSystem) {while (num>0) {s->data[s->top] = num % intoSystem;
s->top++;
num /= intoSystem;
}
printf("转换后:");
while (!isNull(s)) {int data = pop(s);
if (data>=10) { printf("%c", data+55);
}else { printf("%d", data);
}
}
printf("\n");
}
void main(){while (1) {int num, intoSystem;
printf("请输入一个大于零的十进制整数(0结束):");
scanf_s("%d", &num);
if (num == 0) { printf("--->>>输入结束\n");
break;
}
printf("请输入要转换的进制(2,8,10,16):");
scanf_s("%d", &intoSystem);
hexadecimalConversion(s, num, intoSystem);
}
}
- 判断回文数
void palindromeJudgment(struct Stack *s) { while (1) {if (isFull(s)) { printf("--->>>栈满,不允许继续插入\n");
}
int data;
printf("判断回文--请输入进栈数据(0结束):");
scanf_s("%d", &data);
if (data == 0) { printf("--->>>输入结束\n");
break;
}
push(s, data);
}
int palindromeArray[maxLength];
int count = 0;
while (!isNull(s)) {int data = pop(s);
palindromeArray[count] = data;
count++;
}
int flag = 0;
for (int i = 0; i< count;i++) {if (s->data[i] == palindromeArray[i]) { flag++;
}
}
if (flag == count) {printf("是回文\n");
}
else {printf("不是回文\n");
}
}
补充:链栈入栈:创建新节点P , 将P的next属性指向栈顶后,再改变栈顶的值
出栈:保存栈顶的值后,先改变栈顶的位置,再释放保存的值。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:【数据结构】栈的基本操作与栈的应用-创新互联
网页地址:http://cdiso.cn/article/ihohd.html