精华内容
下载资源
问答
  • 栈实现队列逆序输出,C语言代码,VC++编译器!
  • 逆序输出字符串最可能先想到的是遍历时用保存字符,最后出栈。既然可以实现,那我们也可以用递归的方法来实现,并且一定会比较简单。 除了以上两种,还可以对字符串进行原地逆置,最后再将该字符串输出即可。 ...

    前言

    • 逆序输出字符串最可能先想到的是遍历时用栈保存字符,最后出栈。既然栈可以实现,那我们也可以用递归的方法来实现,并且一定会比较简单。
    • 除了以上两种,还可以对字符串进行原地逆置,最后再将该字符串输出即可。

    一、简单递归实现

    void fun(char *s)
    {
    	if(*s!='\0') // 递归终止条件
    	{
    		fun(s+1); // 注意这里是先递归再输出,这样就可以从后面开始逆序输出
    		printf("%c",*s);	
    	}
    } 
    
    int main(int argc, char *argv[]) {
    	char s[20];
    	gets(s); 
    	printf("原始字符串:%s\n",s);
    	printf("逆序输出字符串");
    	fun(s);
    	return 0;
    }
    

    运行结果
    在这里插入图片描述

    二、 原地逆置实现

    void revstr(char *s)
    {
    	if(s!=NULL)
    	{
    		char *result = s; //保存字符串首地址,便于输出 
    		int len = strlen(s);  
    		char *r = s+len-1; // 定位到最后一个字符 
    		char temp;
    		while(r>s)  // 两个指针相向而行 
    		{
    			temp = *s;
    			*s = *r;
    			*r = temp;
    			s++;
    			r--;
    			 
    		}
    		printf("%s",result);
    	}
    }
    int main(int argc, char *argv[]) {
    	char s[20];
    	gets(s); 
    	printf("原始字符串:%s\n",s);
    	printf("逆序输出字符串");
    	revstr(s);
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • C语言 逆序输出单链表(递归)

    千次阅读 2017-09-02 09:38:26
    但我们实现逆序输出,并不需要先把单链表整个逆置过来。 只需要采取的思想,即递归即可非常简单地实现单链表的逆序输出。 代码: void R_Print(LNode* L) { if(L->next !=NULL) { R_Print(L->next); }...

    对于单链表而言,顺序输出十分简单,但逆序输出则有点难度,因为每个结点都只有后继指针,而没有前驱指针。

    但我们实现逆序输出,并不需要先把单链表整个逆置过来。

    只需要采取栈的思想,即递归即可非常简单地实现单链表的逆序输出。


    代码:

    void R_Print(LNode* L)
    {
    	if(L->next !=NULL)
    	{
    		R_Print(L->next);
    	}
    	printf("%d\n",L->data);
    	return ;
    }


    展开全文
  • C语言利用队列的操作实现队列中元素的逆置(逆序输出) 题目均在sdibt acm oj上AC,参考《深入浅出数据结构和算法》教材,逐个复制即可运行,欢迎评论指正! Description 假设队列中有n个整数,编写算法实现将...
    • C语言利用队列的操作实现队列中元素的逆置(逆序输出)

    题目均在sdibt acm oj上AC,参考《深入浅出数据结构和算法》教材,逐个复制即可运行,欢迎评论指正!

    Description

    假设队列中有n个整数,编写算法实现将队列中的元素逆置,要求利用栈实现。

    要求:

    (1)编写函数分别实现队列初始化、判断队空、判断队满、入队、出队的操作;

    (2)编写函数分别实现栈的初始化、判断栈空、栈满、入栈、出栈操作;

    (3)主函数调用上述函数,实现所给问题。

    Input

     输入队列中元素的个数n

    依次输入n个数,建立队列。

    Output

     依次输出逆置后的队列中的元素。

    Sample Input

    6
    1 2 3 4 5 6

    Sample Output

    6 5 4 3 2 1

    HINT

    若想完成逆置,并且使用队列和栈的操作,我们必须使用队列的先进先出原则,和栈的先进后出原则。

    那么我们两者结合,使用栈来逆置,逆置后的元素随即入队,最后对队列进行一个输出元素的操作,这样就能完成逆置这一操作。

    结构体定义如下,队列+栈:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 20
    #define STACK_SIZE 30
    
    
    /// 
    //定义队列的结构体
    typedef struct Squeue{
    	int data[MAXSIZE];//队列内元素的最大长度
    	int front;//队头
    	int rear;//队尾
    }Squeue;
    
    //定义栈(顺序栈)的结构体 
    typedef struct{
        int *base;
        int *top;  //栈顶指针
        int size;
    }seqStack;
    ///

    栈的基本几个操作:初始化、出入栈、取栈顶元素

    int InitStack(seqStack *s){
        s->base = (int *)malloc(STACK_SIZE* sizeof(seqStack));//动态分配30个单位的stack
        //省略是否空间满
        s->top = s->base;//栈顶和栈尾相同,栈里面没有元素
        s->size = STACK_SIZE;
        return 1;
    }
    int Push(seqStack *s,int x){
    
        *s->top = x;
        s->top++;
        return 1;
    }
    
    int Pop(seqStack *s,int *x){
        if(s->top == s->base)return 0;
        else{
            s->top--;
            *x = *s->top;
            return 1;
        }
    }
    int GetTop(seqStack *s, int *x){
        if(s->top==s->base)
    		return 0;
        else{
            *x=*(s->top-1);
            return 1;
        }
    }

    队列的几个基本操作:初始化、判断空状态、出入队

    //初始化队列
    void InitQueue(Squeue *Q)
    {
    	Q->front = Q->rear = 0;
    }
    
    //判断队列是否为空
    int isQueueEmpty(Squeue *qu)
    {
    	if(qu->front == qu->rear)
    	{
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    }
    
    //元素入队操作
    int EnQueue(Squeue *qu,int x)
    {
    	//若队满则无法入队——当前个数已经超过最大数量,
    	//就会出现mod(Maxsize)的结果是队头指针
    	//比如,队头是1,最大长度是12,若入队第13个元素,则会出现13mod12==1(和队头相等)的情况
    	//这样就会return false 
    	if((qu->rear + 1) % MAXSIZE == qu->front)
    	{
    		return 0;
    	}
    	qu->rear = (qu->rear + 1) % MAXSIZE;
    	qu->data[qu->rear] = x;
    	return 1;
    }
    
    //元素出队操作
    int deQueue(Squeue *qu,int *x)
    {
    	//若队空则无法出队
    	if(qu->front == qu->rear)
    	{
    		return 0;
    	}
    	qu->front = (qu->front + 1) % MAXSIZE;
    	*x = qu->data[qu->front];
    	return 1;
    }

    主函数:入栈->出栈、入队->出队输出完成逆置

    int main()
    {
    	int i , n , x , a;
    	scanf("%d",&n);
    
    	Squeue q;
    	seqStack s;
    
        InitStack(&s);
    	InitQueue(&q);
    
    	//顺序的入栈 
    	for(i = 0;i < n;i++)
    	{
    		scanf("%d",&a);
    		Push(&s,a);
    	}
    	
    	int stackNumber;
    	for(i=0;i<n;i++)
        {
            Pop(&s,&stackNumber);	//逆序的出栈(遵顼先进后出原则) 
            EnQueue(&q,stackNumber);//逆序的入队  
        }
        while(!isQueueEmpty(&q))
    	{
    		deQueue(&q,&x);			//逆序的出队(遵循先进先出原则) 
    		printf("%d ",x);		//完成逆转,输出! 
    	}
    	
    	return 0;
    }
    

     

    展开全文
  • 将一个单链表的内容逆序输出,考虑到当一个链表的元素打印之前将该元素的前一个元素打印,运用这个思路可以使用递归来实现该功能,(不过该方法仍然存在,问题,当链表过长会导致溢出问题)代码如下: /* * File...

    将一个单链表的内容逆序输出,考虑到当一个链表的元素打印之前将该元素的前一个元素打印,运用这个思路可以使用递归来实现该功能,(不过该方法仍然存在,问题,当链表过长会导致栈溢出问题)代码如下:

    </pre><pre name="code" class="cpp">/* 
     * File:   main.c
     * Author: Kyle
     *
     * Created on 2015年9月7日, 下午2:34
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int Item; //定义数据项类型  
    
    /*
     *单链表,结构体
     */
    typedef struct node {
        Item item; //数据域  
        struct node* next; //链域  
    
    } Node;
    
    void Add2Tail(Node** pHead, int value) {  //链表末尾添加一个元素
        Node *p = (Node *) malloc(sizeof (Node));
        p->item = value;
        p->next = NULL;
    
        if (*pHead == NULL) {
            *pHead = p;
        } else {
            Node *temp = *pHead;
            while (temp->next != NULL) {
                temp = temp->next;
            }
            temp->next = p;
        }
    }
    void Reversing_Output_List(Node* list) { //递归方法,逆序输出一个链表内容
        if (list != NULL) {
            if (list->next != NULL) {
                Reversing_Output_List(list->next);
            }
            printf("%d,", list->item);
        }
    }
    
    int main() {
    
    /**
    * 2.面试题5  逆序输出一个链表内容
    */
      
                Node *p = NULL;
                Add2Tail(&p, 4);
                Add2Tail(&p, 56);
                Add2Tail(&p, 6);
                Add2Tail(&p, 7);
                Add2Tail(&p, 9);
                Add2Tail(&p, 3);
                Add2Tail(&p, 1);
                Add2Tail(&p, 66);
                Add2Tail(&p, 24);
                Reversing_Output_List(p);
        return (EXIT_SUCCESS);
    }
    
    

    展开全文
  • 是 仅限定在表尾插入或输出的一种链表形式,它不能像链表一样随便输出、随便插入,是一种“先进后出”的形式,可以理解为逆序输出。 1.写顺序,我们需要先在头文件部分定义一个存储空间初始分配量和一个存储...
  • 栈实现一维消消乐(c语言写法) 题目:输入一串字符,消去两个相邻的字符对。 思路:利用栈先进后出的特点,先写好栈的各个函数如初始化栈,进栈,出栈,读栈顶元素。在每次入栈之前,将当前元素与栈顶元素进行...
  • 1. 输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey;...A: 递归方法逆序输出方法逆序输出。(任意实现一种既可)void PrintListUsingRecursicve(pList
  • 利用你实现的Stack实现输入数字的逆序输出。 【输入】整数序列以-1结束,序列长度小于100 【输出】输入整数序列的逆序序列 例如: 【输入】3 9 8 2 5 -1 【输出】5 2 8 9 3 include&amp;amp;amp;amp;amp;lt;...
  • 1. 输入一个链表的头结点从尾到头反过来输出每个结点的值链表结点... A: 递归方法逆序输出栈方法逆序输出 (任意实现一种既可) voidPrintListUsingRecursicve(pListNodehead) { if(head!=NULL) { PrintListUsingRecur
  • 借助的特性,十进制转二进制转换用递归写还蛮方便的 #include<stdio.h> void Dec2Bin(int num){ if(num==1) //num等于1 最后一项了 结束递归 { printf("%d",num);...//逆序输出 } int main(){ ...
  • c语言经典案例

    2014-10-30 08:06:57
    实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 单链表节点逆置 298 实例207 应用栈实现进制转换 300 实例208 用栈实现行编辑程序 303 实例...
  • 给定一个字符串,然后将其翻转,逆序输出 一. python 1.字符串切片 s = "123ABC" s = s[::-1] print(s) 2.reverse s="123ABC" print("".join(reversed(s))) s = "123ABC" l = list(s) l.reverse() print("".join(l...
  • 数据结构中的

    2019-11-17 15:15:49
    在刚学习完C语言后,我设计了个程序实现10进制向n进制转换,我发现只能将其最终结果逆序输出。想正序输出一直没有实现。但是当我了解到了结构的时候豁然开朗。什么是结构?我的理解就是它就像是一个没盖子的瓶子...
  • 2.c模拟weindow下getch.c某月天数.c逆序.c逆序四位整数.c排序.c判断某个月的天数.c判断一个日期是否合法.c判断一个数是不是素数.c扑克.c全局数组实现整数.c全字符数字.c闰年.c三角形菱形.c生命细胞.c十整数逆序...
  • 9. 写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。 10. 给定mxn矩阵A[m,n],并设A[i,j][i,j+1](0,0)和A[i,j][i+1,j] (0,0)。设计一个算法,判定x是否在A中,要求时间复杂度为O(m+n)。
  • 构造一颗表达式树

    千次阅读 2016-04-03 11:31:46
    数据结构与算法分析——c语言...以前的文章也实现的用逆序转表达式,用实现。这个用树来实现。树更加万能吧,逆序,中序,前序什么的都有。 tree.h #include typedef std::string ElementType; #ifndef _T
  • 2014年腾讯校园招聘C语言笔试题含答案 2014年腾讯校园招聘C语言笔试题含答案 1.输入一个链表的头结点,从尾到头... A: 递归方法逆序输出方法逆序输出。 (任意实现一种既可) void PrintListUsingRecursicve(pList...
  • 04_字符串反转_方法2递归逆序(3个点)_传智扫地僧 05_考试题解答和项目开发代码书写手法 06_一级指针易错模型分析_重点 07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_...
  • 实例091 双链表逆序输出 120 实例092 约瑟夫环 122 实例093 创建顺序表并插入元素 123 实例094 向链表中插入结点 125 实例095 从链表中删除结点 126 实例096 合并两个链表 129 实例097 单链表就地逆置...
  • Java开发技术大全(500个源代码).

    热门讨论 2012-12-02 19:55:48
    HelloNative.h 用javah生成的C语言用的头文件 HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。 注:1、要用面向对象的方法设计代码; 2、一个图是一个类的实例; 3、类...
  • 新手学习C++入门资料

    2008-12-28 23:58:50
    C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。 #include iostream.h main() //C++中main()函数默认为int型,而C语言中默认为void型。 { int a; cout; cin>>a; /*输入...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    本书主要内容包括:面试流程及准备、英语面试、电话面试、C/C++语言基础、流程控制、输入/输出、预处理、内存管理、指针、面向对象基础、类、多态、继承、函数、模板与STL、数据结构、软件工程、数据库、操作系统、...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    8. 一个算法具有 5个特性: (1)有穷性 、 (2)确定性 、 (3)可行性 ,有零个或多个输入、有一个或多个输出。 《数据结构 1800题》 9.已知如下程序段 FOR i:= n DOWNTO 1 DO {语句 1} BEGIN x:=x+1;...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

c语言栈实现逆序输出

c语言 订阅