| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:发一个stack头文件,自己写的,求意见
取消只看楼主 加入收藏
vinaleth
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-2-24
收藏
 问题点数:0 回复次数:0 
发一个stack头文件,自己写的,求意见
#include <assert.h>
#include <stdlib.h>

#ifndef _STACK_DEFINED

typedef struct
{
    int size;
    int max;
    int count;
    unsigned char* data;
    int top;
}stack;

stack init_stack(int size);
void cleanup_stack(stack* s);
void expand_stack(stack* s, int length);
void top_stack(stack s, void* d);
void push_stack(stack* s, void* d);
void pop_stack(stack* s, void* d);
int empty_stack(stack s);

stack init_stack(int size)
{
    stack s;
    s.size=size;
    s.max=0;
    s.count=0;
    s.data=0;
    s.top=-1;
    return s;
}

void cleanup_stack(stack* s)
{
    s->max=0;
    s->count=0;
    s->data=0;
    s->top=-1;
}

void expand_stack(stack* s, int length)
{
    void* v=realloc(s->data,(s->max+length)*s->size);
    assert(v);
    s->data=v;
    s->max+=length;
}

void top_stack(stack s, void* d)
{
    if(empty_stack(s))
        exit(0);
    memcpy(d,&(s.data[s.top*s.size]),s.size);
}

void push_stack(stack* s, void* d)
{
    if(s->count==s->max)
        expand_stack(s,10);
    memcpy(&(s->data[(s->top+1)*s->size]),d,s->size);
    s->count++;
    s->top++;
}

void pop_stack(stack* s, void* d)
{
    memcpy(d,&(s->data[s->top*s->size]),s->size);
    s->data[s->top*s->size]=0;
    s->top--;
    s->count--;
}

int empty_stack(stack s)
{
    return s.top==-1;
}

#define _STACK_DEFINED
#endif
stack.rar (871 Bytes)
搜索更多相关主题的帖子: include count 
2011-02-25 21:43
快速回复:发一个stack头文件,自己写的,求意见
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017915 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved