#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stack{
char data;
struct stack *next;
}stack_t;
stack_t *create_stack()
{
stack_t *h = (stack_t *)malloc(sizeof(stack_t));
h->next = NULL;
return h;
}
void push_stack(char data, stack_t **p)
{
stack_t *n = (stack_t *)malloc(sizeof(stack_t));
n->data = data;
n->next = (*p)->next;
(*p)->next = n;
}
char pop_stack(stack_t *p)
{
return p->data;
}
int main()
{
char data;
int cnt = 0;
stack_t *head = create_stack();
while(scanf("%c",&data)){
if(data == '\n') break;
push_stack(data, &head);
cnt ++;
}
while(head->next){
char x = pop_stack(head->next);
printf("%c",x);
head = head->next;
}
printf("\n");
return 0;
}
你所说的问题是什么,我这边调试并没有发现问题!
老实说你这个并不是堆栈算法。这个只是单向链表。
你要的每一步过程解释都写在代码上了,有不懂的可以参考此篇博客,这里会有对单向链表详细介绍:
https://blog.csdn.net/cpp_learner/article/details/105015219
如果看了代码注释和博客还是理解不了,再回复我哪里不懂,给你讲解一下!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 单项链表结构体
typedef struct stack {
char data; // 存储数据
struct stack *next; // 存储下一个节点
}stack_t;
// 分配头节点内存返回
stack_t *create_stack() {
stack_t *h = (stack_t *)malloc(sizeof(stack_t)); // 分配内存
h->next = NULL; // 节点的下一个节点赋值NULL
return h;
}
// 头插法
void push_stack(char data, stack_t **p) {
stack_t *n = (stack_t *)malloc(sizeof(stack_t)); // 新建节点
n->data = data; // 新节点数据赋值
n->next = (*p)->next; // 新节点的下一个节点指向头节点的下一个节点
(*p)->next = n; // 头节点的下一个节点指向新节点
/* 由上面几行代码实现头插法,每个新建的节点都在头部进行插入 */
}
// 获取节点数据返回
char pop_stack(stack_t *p) {
return p->data;
}
int main() {
char data;
int cnt = 0;
stack_t *head = create_stack(); // 为链表分配内存
while (scanf_s("%c", &data)) { // 循环输入字符串,直到遇到回车符停止
if (data == '\n') break; // 如果是回车符,结束循环
push_stack(data, &head); // 头插法,将输入插入链表中
cnt++; // 统计字符串的个数
}
while (head->next) { // 当头节点的下一个节点不等NULL时,执行循环体
char x = pop_stack(head->next); // 将节点传入函数中,返回参数节点的数据data
printf("%c", x); // 输出返回来的data数据
head = head->next; // 头节点指向自己的下一个节点
}
printf("\n");
return 0;
}
老实说你这个并不是堆栈算法。这个只是单向链表。
你要的每一步过程解释都写在代码上了,有不懂的可以参考此篇博客,这里会有对单向链表详细介绍:
https://blog.csdn.net/cpp_learner/article/details/105015219
如果看了代码注释和博客还是理解不了,再回复我哪里不懂,给你讲解一下!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 单项链表结构体
typedef struct stack {
char data; // 存储数据
struct stack *next; // 存储下一个节点
}stack_t;
// 分配头节点内存返回
stack_t *create_stack() {
stack_t *h = (stack_t *)malloc(sizeof(stack_t)); // 分配内存
h->next = NULL; // 节点的下一个节点赋值NULL
return h;
}
// 头插法
void push_stack(char data, stack_t **p) {
stack_t *n = (stack_t *)malloc(sizeof(stack_t)); // 新建节点
n->data = data; // 新节点数据赋值
n->next = (*p)->next; // 新节点的下一个节点指向头节点的下一个节点
(*p)->next = n; // 头节点的下一个节点指向新节点
/* 由上面几行代码实现头插法,每个新建的节点都在头部进行插入 */
}
// 获取节点数据返回
char pop_stack(stack_t *p) {
return p->data;
}
int main() {
char data;
int cnt = 0;
stack_t *head = create_stack(); // 为链表分配内存
while (scanf_s("%c", &data)) { // 循环输入字符串,直到遇到回车符停止
if (data == '\n') break; // 如果是回车符,结束循环
push_stack(data, &head); // 头插法,将输入插入链表中
cnt++; // 统计字符串的个数
}
while (head->next) { // 当头节点的下一个节点不等NULL时,执行循环体
char x = pop_stack(head->next); // 将节点传入函数中,返回参数节点的数据data
printf("%c", x); // 输出返回来的data数据
head = head->next; // 头节点指向自己的下一个节点
}
printf("\n");
return 0;
}
大哥们,这个哪里出了问题
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y