zoukankan      html  css  js  c++  java
  • c语言实现的栈---链表+数组

    1.数组实现的栈

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXSIZE 5
    /**
    *数组实现的栈,缺点,容量固定
    **/
    typedef struct{
    	int data[MAXSIZE];
    	int index;
    }Stack;
    Stack s;
    /**
    *入栈,成功返回1,否则0
    **/
    int push(int e){
    	int rt = 0;
    	if(s.index < MAXSIZE-1){
    		s.data[++s.index] = e;
    	}else{
    		rt = -1;
    	}
    	return rt;	
    }
    /**
    *初始化栈
    */
    int clear(void){
    	s.index = -1;
    	return 0;
    }
    /**
    *判断栈是否为空
    **/
    int isempty(void){
    	return (s.index == -1)?1:0;
    }
    
    /**
    *出栈,弹出栈顶元素
    **/
    int pop(void){
    	int t=0;
    	if(s.index != -1){
    		t=s.data[s.index--];
    	}
    	return t;
    }
    /**
    *栈内元素打印
    */
    int displaystack(void){
    	int p=s.index;
    	while(s.index!=-1){
    		printf("currentdata:%d
    ",s.data[s.index--]);
    	}
    	s.index = p;
    	return 0;
    }
    int main(void){
    	clear();
    	puts("after push:");
    	push(1);
    	push(2);
    	push(3);
    	push(4);
    	push(5);
    	push(6);
    	printf("s.index=%d:
    ",s.index);
    	displaystack();
    	puts("
    after pop");
    	pop();
    	displaystack();
    	return 0;
    }
    

      2.链表实现

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    /**
    *链表实现的栈
    **/
    typedef struct linklist{
    	int data;
    	struct linklist *next;
    	struct linklist *pre;
    }Link;
    typedef struct{
    	int index;//栈顶
    	int empty;//链表是否为空标志
    	Link *head;
    }StackLink;
    StackLink s;
    /**
    *入栈
    **/
    int push(int e){
    	Link *element,*end;
    	if(s.index==0){
    		end = (Link *)malloc(sizeof(Link));
    		s.empty = -1;
    	}else{
    		end = s.head;
    	}
    	element = (Link *)malloc(sizeof(Link));
    	element->data = e;
    	element->pre = end;
    	element->next = NULL;
    	end->next = element;
    	end = element;
    	s.index ++;
    	s.head = end;
    	return 0;	
    }
    /**
    *标志位设为空
    **/
    int clear(){
    	s.empty = 0;
    	return 0;
    }
    /**
    *判断栈是否为空
    **/
    int isempty(void){
    	return (s.empty==0)?1:0;
    }
    
    /**
    *出栈,弹出栈顶元素
    **/
    int pop(void){
    	int t=0;
    	if(s.index != 0&&s.empty == -1){
    		s.index --;
    		Link *temp,*p;
    		t=s.head->data;
    		temp=s.head;
    		p = temp->pre;
    		free(s.head);
    		s.head = p;
    	}else{
    		s.empty = 0;
    	}
    	return t;
    }
    /**
    *栈内元素打印
    */
    int displaystack(void){
    	Link *t = s.head;
    	while(s.head->pre!=NULL){
    		printf("currentdata:%d
    ",s.head->data);
    		s.head=s.head->pre;
    	}
    	s.head = t;
    	return 0;
    }
    int main(void){
    	clear();
    	puts("after push:");
    	for(int i=0;i<100;i++)
    		push(i);
    	printf("s.index=%d:
    ",s.index);
    	displaystack();
    	puts("
    after pop");
    	pop();
    	pop();
    	displaystack();
    	return 0;
    }
    

      

  • 相关阅读:
    使用express+multer实现node中的图片上传
    利用H5构建地图和获取定位地点
    移动端开发基础 干货分享
    关于angularJS的一些用法
    你好 JSONP !!!!
    CentOS7使用Alien将RPM从DE转换为DEB和DEB转换为RPM包
    [Windows] visio2019破解激活
    python---九九乘法表代码
    HTTP 请求方式: GET和POST的比较
    win10WLAN没有有效的ip配置
  • 原文地址:https://www.cnblogs.com/g177w/p/12316693.html
Copyright © 2011-2022 走看看