2025年3月21日 星期五 甲辰(龙)年 月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

纯C用栈实现倒序输出字符串

时间:04-16来源:作者:点击数:75

有人问用C言语用栈实现倒序输出字符串。

示例中用空格作为字符串的分隔符。

  • #include <stdio.h>
  • #include <stdlib.h>
  • #define ERR_VALUE -1 //参数错误
  • #define ERR_MEMORY -2//内存错误
  • #define OK 0
  • #define TRUE 1
  • #define FALSE 0
  • #define STRLEN 88
  • typedef struct _MyStack
  • {
  • char *str;
  • struct _MyStack *next;
  • }MyStack;
  • typedef MyStack * pMyStack;
  • //创建空栈
  • int create_stack(pMyStack *stack)
  • {
  • (*stack)=(pMyStack)malloc(sizeof(MyStack));
  • if (stack==NULL)
  • {
  • return ERR_MEMORY;
  • }
  • (*stack)->next=NULL;
  • (*stack)->str=NULL;
  • //memset(stack->str,0,STRLEN);
  • return OK;
  • }
  • //压栈
  • int push_stack(pMyStack *stack,const char *data,int dataLen)
  • {
  • if (*stack==NULL||data==NULL)
  • {
  • return ERR_VALUE;
  • }
  • if ((*stack)->str==NULL) //空栈,不用建节点
  • {
  • (*stack)->str=(char*)malloc(dataLen*sizeof(char)+1);
  • memset((*stack)->str,0,dataLen+1);
  • //赋值
  • strncpy((*stack)->str,data,dataLen);
  • (*stack)->next=NULL;
  • return OK;
  • }
  • else
  • {
  • pMyStack node=NULL;
  • //新建节点
  • node=(pMyStack)malloc(sizeof(MyStack));
  • if (node==NULL)
  • {
  • return ERR_MEMORY;
  • }
  • node->str=NULL;
  • node->next=NULL;
  • node->str=(char*)malloc(dataLen*sizeof(char)+1);
  • memset(node->str,0,dataLen+1);
  • //赋值
  • strncpy(node->str,data,dataLen);
  • node->next=(*stack);
  • (*stack)=node;
  • return OK;
  • }
  • }
  • //栈顶是否为空
  • int stack_isEmpty(pMyStack stack)
  • {
  • if (stack==NULL)
  • {
  • return TRUE;
  • }
  • else
  • {
  • return FALSE;
  • }
  • }
  • //删除栈顶元素
  • int pop_stack(pMyStack *stack)
  • {
  • pMyStack tmp=NULL;
  • if (stack_isEmpty(*stack)==TRUE)
  • {
  • return ERR_VALUE;
  • }
  • tmp=(*stack);
  • (*stack)=(*stack)->next;
  • if (tmp->str!=NULL)
  • {
  • free(tmp->str);tmp->str=NULL;
  • }
  • return OK;
  • }
  • //获取栈顶元素
  • const char* top_stack(pMyStack stack)
  • {
  • if (stack_isEmpty(stack)==TRUE)
  • {
  • return NULL;
  • }
  • return stack->str;
  • }
  • //遍历栈
  • void show_stack(pMyStack stack)
  • {
  • pMyStack tmp=stack;
  • if (tmp==NULL)
  • {
  • return ;
  • }
  • while (tmp->str!=NULL)
  • {
  • printf("%s ",tmp->str);
  • if (tmp->next!=NULL)
  • {
  • tmp=tmp->next;
  • }
  • else
  • {
  • break;
  • }
  • }
  • printf("\n");
  • }
  • //清空栈
  • void clear_stack(pMyStack *stack)
  • {
  • if (*stack==NULL)
  • {
  • return ;
  • }
  • while ((*stack)!=NULL&&(*stack)->str!=NULL)
  • {
  • free((*stack)->str);(*stack)->str=NULL;
  • *stack=(*stack)->next;
  • //释放节点
  • free(tmp);tmp=NULL;
  • }
  • }
  • int main()
  • {
  • char data[]={"c hello world ! shen xue bing"};
  • char *de=" ";
  • int deLen=strlen(de);
  • pMyStack stack=NULL;
  • create_stack(&stack);
  • char *head=data;
  • char *pdata=NULL;
  • while(1)
  • {
  • char tmp[20]={0};
  • pdata=strstr(head,de);
  • if (pdata!=NULL)
  • {
  • int len=pdata-head;
  • strncpy(tmp,head,len);
  • head+=len+deLen;
  • push_stack(&stack,tmp,len);
  • //printf("%s\n",tmp);
  • }
  • else //
  • {
  • int len=strlen(head);
  • strncpy(tmp,head,len);
  • push_stack(&stack,tmp,len);
  • //printf("%s\n",tmp);
  • break; //最后没有空格 退出
  • }
  • }
  • printf("遍历整个栈:\n");
  • show_stack(stack);
  • printf("栈顶元素:\n");
  • printf("%s\n",top_stack(stack));
  • printf("删除栈顶元素\n");
  • pop_stack(&stack); //删除栈顶元素
  • printf("遍历整个栈:\n");
  • show_stack(stack);
  • printf("栈顶元素:\n");
  • printf("%s\n",top_stack(stack));
  • //清空栈
  • clear_stack(&stack);
  • system("pause");
  • }

运行结果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门