| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 921 人关注过本帖
标题:关于链栈代码的几个问题
只看楼主 加入收藏
一刀客
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-10-26
收藏
 问题点数:0 回复次数:1 
关于链栈代码的几个问题
#include<stdio.h>
#include<stdlib.h>
#define m 10
#define stack_init_size 100
#define stackincrement 10
typedef struct
{
    int x, y;  
    int dir;  
}elemtype;
typedef struct stacknode
{
    elemtype *base;  /*书上的链栈是有data和next,指针top
    elemtype *top;     这种写法没看过。另外,链栈应该不用长度吧,为什么要加个   
    int stacksize;     stacksize呢?*/
}sqstack;              
int initstack(sqstack *s)
{
    s->base=(elemtype *)malloc(stack_init_size*sizeof(elemtype)); /*我记得在给链栈申请内存的时候要对next域进行
    if(!s->base)//这个条件我不明白                                           赋值才能得到连续的内存,但是这里如何解释?*/
    {
        printf("memory allocation failed,goodbye");
        exit(1);
    }
    s->top=s->base;
    s->stacksize=stack_init_size;
    return 1;
}
int push(sqstack *s,elemtype e)
{
    if(s->top-s->base>=s->stacksize)/*指针可以相加?*/
    {
        s->base = (elemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(elemtype));
        if (!s->base)
        {
            printf("memory allocation failed,goodbye");
            exit(1);
        }
        s->top = s->base+s->stacksize;
        s->stacksize += stackincrement;
    }
    *s->top++=e;
    return 1;
}
int pop(sqstack *s,elemtype *e)
{
    if(s->top==s->base)
        return 0;
    *e=*--s->top; /* 出栈的时候不是先读取数据,再令top指针指向下一个吗?
    return 1;        这里面怎么会是先--再读取数据呢?而且这种写法也不明白*/
}
最好能给以上代码的栈初始化,入栈,出栈的大致流程说明一下 谢谢
搜索更多相关主题的帖子: 代码 
2008-01-22 13:16
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
本人愚見:這位兄弟看書看得很死
只要是語法邏輯正確,寫法無所謂。
這個稱為鏈棧的東西本質上還是棧,根本就不算鏈表;所以鏈可以不考慮長度,棧卻考慮深度。
initstack 初始化棧,相當於創建第一個節點。你書上的大概是對已有頭節點的鏈申請子節點吧?
棧的指針在移動,卻沒有像鏈表那樣創建一個一個地新節點
if(!s->base) //如果第一個節點沒有申請到,後面的就沒辦法作
(s->top-s->base>=s->stacksize) //你把棧當作數組就懂了

*e=*--s->top; 先後順序不是規定死的,看指針的設置,舉本例,當僅有一個元素時:
top  ->
base ->element
一目了然,先跳指針才能去到元素
2008-01-23 17:03
快速回复:关于链栈代码的几个问题
数据加载中...
 
   



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

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