| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1505 人关注过本帖
标题:帮帮我啊,快死了,关于栈的定义啊。
只看楼主 加入收藏
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
 问题点数:0 回复次数:14 
帮帮我啊,快死了,关于栈的定义啊。

问题是这样的:定义一个栈的结构体变量如下

typedef struct stack { int *top; int *base; int stacksize; }*sqstack; sqstack S1; sqstack S2;

我想把S1和S2定义成两个全局变量,可是在引用时跟踪变量却发现这两个变量用的是同一个空间,是同时变化的,那位高手帮帮我啊,我该怎么定义啊。。5555555555555

搜索更多相关主题的帖子: 定义 
2004-09-06 14:19
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
得分:0 
谁能救救我啊,急用啊。。。
2004-09-06 14:23
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

能不能把程序发上来看看,

顺便把typedef的用法细说一下,谢谢!!!


差点把你忘了...
2004-09-06 15:27
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

知道堆内存吧

用malloc就ok啦.


I am a big fan of c plus plus.
2004-09-06 16:54
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
得分:0 
可不可以详细说明一下堆内存,不是很清楚
2004-09-06 17:09
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
得分:0 
这是完成了的程序#include <stdio.h>
#define MAX_VERTEX_NUM 20
#define len sizeof(struct stack)
#define gen sizeof(struct Arc)
#define maxsize 100
#define null 0
int ve[20];
int indegree[20];
int *y;
int *w;
/*---------------------------------------------------------------------------------------------*/
typedef struct Arc{
    int  adjvex;                            /*该弧所指向的顶点位置*/
    struct Arc *nextarc;                      /*指向下一条弧的指针*/
    int  *info;                             /*该弧相关信息的指针*/
}ArcNode;
typedef struct Vnd{
    int  data;                              /*顶点信息*/
    ArcNode  *firstarc;                     /*指向第一条依附该顶点的弧的指针*/
}VNode,AdjList[MAX_VERTEX_NUM];
struct ALGraph {
    AdjList vertices;                       
    int  vexnum,arcnum;                     /*图的当前顶点数和弧数*/
    int  kind;                              /*图的种类标志*/
};
/*-------------------------------------图的邻接表定义------------------------------------------*/
typedef struct stack {
 int *top;
 int *base;
 int stacksize;
}*sqstack;
/*-------------------------------------栈定义--------------------------------------------------*/
main()
{int i,j,n,m,h,k;
 struct ALGraph G;
 ArcNode *p1;
 ArcNode *p2;
 sqstack S1;
 sqstack S2;
 y=&S1;
 w=&S2;
 initstack(y);
 initstack(w);
 printf("\nYou should input all the information of your AOE Net.\n");
 printf("How many facts are there in your AOE Net: ");
 scanf("%d",&n);
 G.vexnum=n;
 for(i=0;i<n;i++)
     {indegree[i]=0;}
 printf("\nAnd now you will input more about the AOE Net.\n");
 for(i=0;i<n;i++)
    {G.vertices[i].data=i+1;
     p1=p2=G.vertices[i].firstarc=(ArcNode *)malloc(gen);
     printf("Input the information of the facts connecting to V%d.\n",i+1);
     printf("how many vertex connect to V%d:",i+1);
     scanf("%d",&m);
     if(m==0)
        {
         G.vertices[i].firstarc=null;
         break;
        }
     printf("The first vertex connect to V%d\n:",i+1);
     printf("adjvex=");
     scanf("%d",&p1->adjvex);
     k=p1->adjvex;
     indegree[k]++;
     printf("right=");
     scanf("%d",p1->info);
     for(j=1;j<m;j++)
        {p1=(ArcNode *)malloc(gen);
         printf("\nThe %d vertex connect to V%d\n:",j+1,i+1);
         printf("adjvex=");
         scanf("%d",&p1->adjvex);
         k=p1->adjvex;
         indegree[k]++;
         printf("right=");
         scanf("%d",p1->info);
         p2->nextarc=p1;
         p2=p1;
        }
     p1->nextarc=null;
   }
 printf("the critical active stands with '*'\n");
 CriticalPath(G);
 getch();
}
/*---------------------------------------------------------------------------------------------*/
initstack(sqstack *s)
{
 (*s)->base=(int *)malloc(maxsize*len);
 if(!(*s)->base) {printf("error\n"); exit(0);}
 (*s)->top=(*s)->base;
 (*s)->stacksize=maxsize;
}
/*------------------------------------栈的初始化-----------------------------------------------*/
void push(sqstack *s,int e)
{int stackincrement;
 stackincrement=(*s)->top-(*s)->base-(*s)->stacksize;
 if((*s)->top-(*s)->base>=(*s)->stacksize)
     {(*s)->base=(int *)realloc((*s)->base,((*s)->stacksize+stackincrement)*len);
      if(!(*s)->base) exit(0);
      (*s)->top=(*s)->base+(*s)->stacksize;
      (*s)->stacksize+=stackincrement;
     }
 (*((*s)->top++))=e;
}
/*------------------------------------入栈函数-------------------------------------------------*/
int pop(sqstack *s)
{int e;
 if((*s)->top==(*s)->base) return 0;
 e=(*(--(*s)->top));
 return e;
}
/*------------------------------------出栈函数-------------------------------------------------*/
int stackempty(sqstack *s)
/*如果栈为空,返回真,否则返回假*/
{if((*s)->top==(*s)->base)
        return 1;
   else return 0;
}
/*--------------------------------------------------------------------------------------------*/
int TopologicalOrder(struct ALGraph G)
{int i,j,k,p,count;
 ArcNode *q;
 initstack(w);
 count=0;
 initstack(y);
 for(i=0;i<G.vexnum;i++)
     {if(!indegree[i])
      push(y,i);
     }
 for(i=0;i<G.vexnum;i++)
    {ve[i]=0;}
 while(!stackempty(y)) {
      j=pop(y);
      push(w,j);
      ++count;
      for(q=G.vertices[j].firstarc;q!=null;q=q->nextarc)
         {k=q->adjvex;
          if(--indegree[k]==0)  
          push(y,k);
          if(ve[j]+*(q->info)>ve[k])  
          ve[k]=ve[j]+*(q->info);
         }
                      }
 if(count<G.vexnum)  return 0;
 else return 1;
}
/*-----------------------------求各顶点事件的最早发生时间ve---------------------------------*/
int CriticalPath(struct ALGraph G)
{int ee,el,dut,k,i,j,h,sum=0,vl[20];
 char tag;
 ArcNode *p;
 if(!TopologicalOrder(G))  
    {printf("The project cannot be applied.\n");
     return 0;
    }                        
 for(i=0;i<G.vexnum;i++)
    {vl[i]=ve[G.vexnum-1];}
 while(!stackempty(w))
     { for(j=pop(w),p=G.vertices[j].firstarc;p!=null;p=p->nextarc)
                {k=p->adjvex;  dut=*(p->info);
                 if(vl[k]-dut<vl[j])  vl[j]=vl[k]-dut;
                }
     }
 for(j=0;j<G.vexnum;++j)
     {for(p=G.vertices[j].firstarc;p!=null;p=p->nextarc)
        {k=p->adjvex;  dut=*(p->info);
         ee=ve[j];  el=vl[k]-dut;
         tag=(ee==el)?'*':'-';
         printf("\nR%d%d duringtime=%d eearly=%d elate=%d critical=%c",j,k,dut,ee,el,tag);
        }
     }
}
/*---------------------------------输出G的各项关键活动-------------------------------------*/
2004-09-06 17:11
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
得分:0 

是对AOE网求关键路径的算法。目前可以正确运行。

起初S1,S2的定义是放在typedef struct stack{}之后的,结果就不对。

后来放到主函数当中就可以正确运行了,可是我实在不解这是为什么。

2004-09-06 17:13
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 
你定义的S1,S2是两个指针吧

我的主页 http://www.
2004-09-06 17:16
书生甲
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-9-6
收藏
得分:0 

对的,是两个指向结构体的指针

2004-09-07 01:28
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

(ArcNode *)malloc(gen);

这不是你自己程序中用的堆内存的申请么??怎么还问!!!

同时,对于typedef的使用我还是有疑问,还有就是你说的为什么在紧随其后不可以,我也不明白,


差点把你忘了...
2004-09-07 09:48
快速回复:帮帮我啊,快死了,关于栈的定义啊。
数据加载中...
 
   



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

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