c语言用栈实现字符串,【C语言】利用栈将数组中字符串逆序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include"stdio.h"

#include"stdlib.h"

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct

{char *base;

char *top;

int stacksize;

}SqStack;

main()

{SqStack S;

char a[4];

int i;

InitStack(&S);

printf("请输入字符:\n");

for(i=0;i<4;i++)

scanf("%c",&a[i]);

for(i=0;i<4;i++)

Push(&S,a[i]);

for(i=0;i<4;i++)

Pop(&S,&a[i]);

for(i=0;i<4;i++)

printf("%c",a[i]);

}

int InitStack(SqStack *S)

{S->base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));

if(!S->base) return 0;

S->top=S->base;

S->stacksize=STACK_INIT_SIZE;

return 1;

}

int Push(SqStack *S,char e)

{if(S->top-S->base>=S->stacksize)

{S->base=(char *)realloc(S->base,(S->stacksize+STACKINCREMENT) * sizeof(char));

if(!S->base) return 0;

S->top=S->base+S->stacksize;

S->stacksize+=STACKINCREMENT;

}

*S->top++=e;

return 1;

}

int Pop(SqStack *S,char *e)

{if(S->top==S->base) return 0;

*e=*--S->top;

return 1;

}

C语言中,我们可以使用数组来实现一个简单的顺序来存储字符串,并通过迭代的方式字符串逆序。以下是基本步骤: 1. 定义结构体:通常包含一个字符数组和两个指针,top表示顶元素的位置,size用于记录大小。 ```c typedef struct { char* stack; int top; int size; } Stack; ``` 2. 初始化:创建一个新的并初始化顶和大小。 ```c Stack* createStack(int capacity) { Stack* s = malloc(sizeof(Stack)); if (s) { s->stack = malloc(capacity * sizeof(char)); if (!s->stack) { free(s); s = NULL; } else { s->top = -1; s->size = 0; } } return s; } ``` 3. 入操作:向中添加字符,如果满则返回错误。 ```c void push(Stack* s, char c) { if (s->top == s->size - 1) { printf("Stack is full.\n"); return; } s->stack[++s->top] = c; s->size++; } ``` 4. 出操作:弹出顶元素,并检查是否已空。 ```c char pop(Stack* s) { if (s->top < 0) { printf("Stack is empty.\n"); return '\0'; } char c = s->stack[s->top--]; return c; } ``` 5. 逆序字符串:遍历整个字符串,每次从中取出一个字符插入到结果新字符串的开头。 ```c void reverseString(char* str, Stack* s) { for (int i = strlen(str); i > 0; i--) { push(s, str[i - 1]); } } ``` 6. 最后,你可以创建一个,对输入的字符串进行逆序处理,然后打印逆序后的字符串。 请注意,这个实现假设字符串有足够的空间存储逆序后的字符串。实际应用中,你可能需要先计算逆序后的长度再分配内存。此外,上述代码并未处理字符串结束符'\0'的情况,如果你需要处理,记得在每个操作前后检查一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值