zoukankan      html  css  js  c++  java
  • 栈、链表等初始化的思考

    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct stacknode {
    	int data;
    	stacknode * next;
    };
    
    //void init(stacknode *s) {          //这种初始化方法导致,建立了一个节点,将这个值赋给s,s的值改变了,这和传值调用函数,调用后函数没有改变的情形一致。
    //在main中,声明stacknode stack后,它的值是0xCCCCCCCCC,调用init()后,其next值不会变为NULL,通过指针改改变结构体值的方式可以是
    //1、改变指针变量的值,即函数返回类型是stacknode *,赋值给s,这样s指向的内容的改变,通过访问s后可知其next的值此时为NULL,实现见下一个函数init()函数 // s = (stacknode*)malloc(sizeof(stacknode)); // s->next = NULL; //} stacknode * init() { //正确实现 stacknode *s = (stacknode*)malloc(sizeof(stacknode)); s->next = NULL; return s; } //2、通过传地址(指针)修改结构体的值的实现是:
       void init(stacknode **s) {
        (*s) = (stacknode*)malloc(sizeof(stacknode));
        (*s)->next = NULL;
    }
    

      

    //一般会犯的错误是以为参数传递的是某类型的地址,那么就以改变这一类型的值,实际上,有个条件,即通过调用指针的方式改变值,这个传入到函数内部的指针的值是不能改变的。

    //注释掉的init() 函数所犯的就是这个错误,传入init的为某个stacknode类型的地址值,在init内部,s变成了新创建的地址值。这样,init调用过程成了传值调用,调用后s值没有改变

    int isEmpty(stacknode * s) {
    	if (s->next == NULL) return 1;
    	else return 0;
    }
    void push(stacknode * s,int v) {
    	stacknode * newnode = (stacknode*)malloc(sizeof(stacknode));
    	newnode->data = v;
    	newnode->next = s->next;
    	s->next = newnode;
    	
    }
    
    stacknode * pop(stacknode * s) {
    	stacknode * p;
    	if (isEmpty(s)) return NULL;
    	else {
    		p = s->next;
    		s->next = s->next->next;
    	}
    	return p;
    }
    
    int main(void) {
    	stacknode *stack = init();
    	int n = 1348;
    
    	while (n) {
    		push(stack, n % 8);
    		n = n / 8;
    	}
    	stacknode * m = NULL;
    	while (!isEmpty(stack)) {
    		m = pop(stack);
    		printf("%d", m->data);
    	
    	}
            //调用void init(stacknode **)实现进制转换
    	stacknode stack;
    	stacknode * ps = &stack;
    	init(&ps);
    
    	int n = 1348;
    
    	while (n) {
    		push(ps, n % 8);
    		n = n / 8;
    	}
    	stacknode * m = NULL;
    	while (!isEmpty(ps)) {
    		m = pop(ps);
    		printf("%d", m->data);
    
    	}
    

       return 0;

    }

  • 相关阅读:
    03.《架构漫谈》阅读笔记
    02.《架构漫谈》阅读笔记
    03.《架构之美》阅读笔记
    02.《架构之美》阅读笔记
    01.《架构之美》阅读笔记
    软件架构中的质量属性--以淘宝网为例(小论文)
    MVC框架介绍分析
    论面向服务架构设计及其应用
    1.26学习进度总结
    1.24学习进度总结
  • 原文地址:https://www.cnblogs.com/hanxinle/p/11163826.html
Copyright © 2011-2022 走看看