当前位置: 首页 > news >正文

反转一个字符串

用数组栈实现

void Reverse(char *C, int len)
{top = -1;for(int i = 0; i < len; i++){push(C[i]);}for(int i = 0; i < len; i++){C[i] = Top();pop();}
}

全部函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_SIZE 101int A[MAX_SIZE];
int top = -1;  //栈顶指针,初始为-1,表示栈为空
void push(int x)
{if (top == MAX_SIZE - 1){printf("栈已满,无法入栈\n");return;}A[++top] = x;
}void pop()
{if (top == -1){printf("栈已空,无法出栈\n");return;}top--;
}void Print()
{for (int i = 0; i <= top; i++){printf("%c", A[i]);}printf("\n");
}int Top()
{if (top == -1){printf("栈已空,无法取栈顶元素\n");return -1;}return A[top];
}void Reverse(char *C, int len)
{top = -1;for(int i = 0; i < len; i++){push(C[i]);}for(int i = 0; i < len; i++){C[i] = Top();pop();}
}int main()
{char C[51];printf("请输入一个字符串:");scanf("%s", C);int len = strlen(C);Reverse(C, len);printf("反转后的字符串为:");printf("%s\n", C);return 0;
}

 用双指针实现(迭代)

#include <stdio.h>
#include <string.h>void reverseString(char *str) {int left = 0;int right = strlen(str) - 1;while (left < right) {// 交换 str[left] 和 str[right]char temp = str[left];str[left] = str[right];str[right] = temp;// 指针向中间靠拢left++;right--;}
}int main() {char str[100];printf("请输入一个字符串: ");scanf("%s", str);reverseString(str);printf("反转后的字符串: %s\n", str);return 0;
}

链表反转用数组栈

#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100// 定义链表节点结构体
typedef struct Node {int data;struct Node* link;
} Node;// 栈结构
Node* stack[MAX_SIZE];
int top = -1;// 栈操作
void push(Node* node) {if (top == MAX_SIZE - 1) {printf("栈满了,无法继续压栈\n");return;}stack[++top] = node;
}Node* pop() {if (top == -1) {printf("栈空了,无法出栈\n");return NULL;}return stack[top--];
}// 链表操作
void insertAtHead(Node** head, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->link = *head;*head = newNode;
}void printList(Node* head) {Node* temp = head;while (temp != NULL) {printf("%d -> ", temp->data);temp = temp->link;}printf("NULL\n");
}// 使用数组栈反转链表
void Reverse(Node** headRef) {if (*headRef == NULL) {printf("链表为空\n");return;}Node* temp = *headRef;// 压栈while (temp != NULL) {push(temp);temp = temp->link;}// 弹栈并重建链表*headRef = pop();         // 新的头结点temp = *headRef;while (top != -1) {temp->link = pop();   // 下一个节点temp = temp->link;}temp->link = NULL;        // 最后一个节点
}// 主函数测试
int main() {Node* head = NULL;insertAtHead(&head, 1);insertAtHead(&head, 2);insertAtHead(&head, 3);insertAtHead(&head, 4);printf("原始链表:\n");printList(head);Reverse(&head);printf("反转后的链表:\n");printList(head);return 0;
}

压入的是 链表中每个节点的地址,也就是指针 

相关文章:

  • C++零基础实践教程 文件输入输出
  • Java转Go日记(一):Slice解密
  • 【字符串的hashCode】hashCode相等但是对应的字符串值不一定相等
  • 分类别中位数归一化
  • 常用正则化技术dropout
  • spark-SQL数据加载和保存
  • Redis清空缓存
  • 【解析】ReentrantLock锁、Syschronized锁面试点解析
  • 数启新疆,智领未来!2025新疆数字经济发展战略研讨会在乌市启幕
  • go学习记录(第二天)
  • unityTEngine 框架学习记录1
  • OpenCv高阶(四)——角点检测
  • 充电宝项目中的MQTT(轻量高效的物联网通信协议)
  • Sherpa简介
  • 公务员体检肌酐临界值处理指南
  • 比特率、码元速率(波特率)的定义、关系及相关计算公式
  • 代码随想录算法训练营day5(哈希表)
  • 【Python进阶】字典:高效键值存储的十大核心应用
  • Web开发-JavaEE应用原生和FastJson反序列化URLDNS链JDBC链Gadget手搓
  • 构件技术(高软58)
  • 建网站需要什么程序/seo网站优化教程
  • 中山网站制作建设/网上怎么推广产品
  • 泰安华航网络有限公司/搜索引擎优化中的步骤包括
  • 云南省建设教育协会网站/专业外贸网络推广
  • 做原油的网站/软文新闻发布网站
  • 网站群如何做网站/今天刚刚发生的新闻