泛型栈
来源:互联网 发布:软件开发企业收入确认 编辑:程序博客网 时间:2024/06/11 09:07
泛型栈
#ifndef AVALON_STACK_H#define AVALON_STACK_H#include <stdio.h>#include <string.h>#include <assert.h> #ifndef AVALON_BOOL#define AVALON_BOOL#define TRUE 1#define FALSE 0typedef int BOOL;/*自定义的BOOL型*/#endif/*定义一个栈结构*/#define DECLARE_NODE(type,name) \typedef struct type##NODE\{\type data;\struct type##NODE *prior;\}NODE##name; #define DECLARE_STACK(type,name) \struct type##STACK\{\int size;\struct type##NODE *base;\struct type##NODE *top;\}STACK##name;/*泛类型栈定义*/#define DECLARE(type,name) \DECLARE_NODE(type,name); \DECLARE_STACK(type,name); /***********************************************//*初始化栈,name为新声明的栈名字的地址 */#define INIT(name) \do{\STACK##name.base=STACK##name.top=NULL;\STACK##name.size=0;\}while(0)/*********** 不破坏栈顶元素取值*************************/#define GET(name,elem) \do{\if (STACK##name.size != 0) {\elem = STACK##name.top->data; \}\} while(0)/************** 压入元素elem **************************/#define PUSH(name,elem) \do {\NODE##name *temp=(NODE##name *)malloc(sizeof(NODE##name));\assert(temp);\temp->data=elem ;\(STACK##name.size)++; \if (1 != STACK##name.size ) { \temp->prior=STACK##name.top;\STACK##name.top=temp;\}\else {\temp->prior=NULL;\STACK##name.top=STACK##name.base=temp;\}\} while(0)/********** 栈顶元素赋值给elem,并弹出 ***********/#define POP(name,elem) \do {\NODE##name * temp=STACK##name.top;\if (STACK##name.size !=0 ) { \*elem =STACK##name.top->data; \if ( STACK##name.size !=1) { \STACK##name.top =temp->prior; \free(temp);\}\else \STACK##name.top=STACK##name.base=NULL;\(STACK##name.size)--;\}\} while(0)/************** 清空栈 ************************/#define CLEAR(name) \do{\NODE##name * temp;\while ( STACK##name.size-- !=0) {\temp=STACK##name.top;\STACK##name.top=STACK##name.top->prior;\free(temp);\}\STACK##name.size=0;\STACK##name.base=STACK##name.top=NULL;\} while(0)/****************栈空 ************************/#define EMPTY(name) ( STACK##name.size == 0 )/*****************长度 ************************/#define LENGTH(name) (1 ? STACK##name.size : 0)#endif
测试程序
#include "stack.h"#include <stdio.h>#include <stdlib.h> int main(void){DECLARE(int,A);DECLARE(double,B);double b;int a;INIT(A);INIT(B);printf("%d ",LENGTH(A));for (a=1;a<=10000 ;a++) {PUSH(A,a);PUSH(A,a);PUSH(A,a);}printf("%d ",LENGTH(A));for (b=1; b<=10000; b++) {PUSH(B,b);}while ( ! EMPTY(A)) {POP(A,&a);if ( ! EMPTY(B)) {POP(B,&b);}}CLEAR(A);system("PAUSE");return 0;}
阅读全文
0 0
- 泛型栈
- C实现的泛型栈
- C泛型栈的实现
- C实现的泛型栈
- C#-—体验泛型栈
- java实现泛型栈
- C实现的泛型栈
- 对泛型栈的学习
- [库]C实现的泛型栈
- C语言实现一个泛型栈
- 编程范式七 笔记 泛型栈
- 用C宏写的泛型栈
- C语言:泛型栈的一次尝试
- 泛型栈-C语言的简单实现
- 使用宏实现简单的泛型栈
- c#:自定义泛型栈实现 IEnumerable IEnumerator
- 京东2018秋招编程题
- 《UNIX网络编程 卷2》 笔记: 记录上锁
- requests禁止重定向
- UVa 11307
- Using a std::unordered_set of std::unique_ptr
- 泛型栈
- 后端笔记1
- 慕课JAVA之文件传输基础----JAVA IO流
- S3c2440之时钟频率(修改综合版)
- ue4 行为树
- C++泛型
- Java9 模块化 Jigsaw 入门指引
- 使用公式C=(5/9)(F-32)打印下列华氏温度与摄氏温度对照表。
- [转]图像梯度:图像频率