转载

使用堆栈反转字符串

反转字符串的方法其实蛮多的,本文主要介绍使用堆栈来实现,思路其实比较简单,就是把字符串的字符依次压栈,然后最后再依次出栈即可。我们使用这个例子的主要目的就是希望大家能够熟练使用堆栈。

c语言的实现如下:

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> // 使用数组来实现堆栈 struct Stack {  int top;  unsigned capacity;  char* array; }; // 创建一个堆栈 struct Stack* createStack(unsigned capacity) {  struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));  stack->capacity = capacity;  stack->top = -1;  stack->array = (char*) malloc(stack->capacity * sizeof(char));  return stack; } int isFull(struct Stack* stack) { return stack->top == stack->capacity - 1; } int isEmpty(struct Stack* stack) { return stack->top == -1; } // 压栈 void push(struct Stack* stack, char item) {  if (isFull(stack))   return;  stack->array[++stack->top] = item; } // 出栈 char pop(struct Stack* stack) {  if (isEmpty(stack))   return INT_MIN;  return stack->array[stack->top--]; } // 反转字符串 void reverse(char str[]) {  // 创建一个字符串长度的堆栈  int n = strlen(str);  struct Stack* stack = createStack(n);  // 把所有的字符串内容都压栈  int i;  for (i = 0; i < n; i++)   push(stack, str[i]);  // 再出栈就ok了  for (i = 0; i < n; i++)   str[i] = pop(stack); } int main() {  char str[] = "ReverseTest";  reverse(str);  printf("Reversed string is %s", str);  getchar();  return 0; } 

若是上文有任何错误或者您有任何想法都可以在下面的评论中提出。

本文首发于东岚之音:www.dlvoice.com,转载请保留此语句。

正文到此结束
Loading...