| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3029 人关注过本帖, 1 人收藏
标题:在一段连续空间里面,维护N个stack
只看楼主 加入收藏
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
是不是用到操作系统碎片整理的相关知识啊?
话说要依情况移动栈?
连接的内存空间完全被栈占用吗?
可以用一小部分建表什么的吗?

为游戏狂~~!!    大家努力编哈!
2012-03-16 15:32
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
这个帖子不错啊,关注啊

为游戏狂~~!!    大家努力编哈!
2012-03-16 15:33
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:2 
我贴个代码

大概思路就是首先用一个数组存如题的那条链,然后再开一个同样大的数组来存每个栈的后续数据

然后输入方式我自己定义的(因为楼主没说怎么输入数据),在输入的过程会出现如下4种提示:

1、内存满,无法存入
2、某个数已经存入某个栈
3、某个数已经出某个栈
4、某个栈没数据了

自己测试了好几个数据,还没发生错误

程序代码:
#include <stdio.h>
#include <stdlib.h>

int N,StackNum;     //N如题  StackNum表示整个栈最多容纳的数目

int *Next,*Line;

void pop(int Stack)
{
     int i,j;
     
     if (Next[Stack]==Stack)
     {
                           printf("No date in this Stack\n"); 
                           return;
     }
     i=Stack;
     while (i!=Next[i])
     {
           j=i; i=Next[i];
     }
     printf("Num %d is out of Stack %d\n",Line[i],Stack);
     Next[j]=j;
     
     Next[i]=Next[0]; Next[0]=i;
     if (Next[i]==0) Next[i]=i;
}

void push(int Stack,int Num)
{
     int i,j;
     
     i=Next[Stack];
     while (Next[i]!=i) i=Next[i];
     
     j=Next[0];
     if (j==0)
     {
              printf("No space to save it!\n");
              return;
     }
     
     Next[i]=j; Line[j]=Num; 
     
     Next[0]=Next[j]; if (Next[0]==j) Next[0]=0;
     
     Next[j]=j;
     
     printf("Num %d get in Stack %d\n",Num,Stack);
}
     

int main()
{
    scanf("%d%d",&N,&StackNum);
    
    Line=malloc(sizeof(int)*(N+1+StackNum));
    Next=malloc(sizeof(int)*(N+1+StackNum));
        
    int i;
    for (i=1; i<=N; i++) Next[i]=i; Next[0]=N+1;
    for (i=N+1; i<N+StackNum; i++) Next[i]=i+1; Next[N+StackNum]=N+StackNum;
    
    int flag,Stack,Num;    //flag表示入还是出,Stack表示第几个栈,Num表示数目
    while (scanf("%d%d",&flag,&Stack))    //flag=1表示出栈,后面接第几个栈,0表示入栈,接第几个栈及入栈的数字     此处是我自己定的输入规则,应为你没有说明 
    if (flag) pop(Stack); 
    else
    {
        scanf("%d",&Num);
        push(Stack,Num);
    }
}

    
    
2012-03-16 16:32
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:2 
我也去研究研究这方面的知识
2012-03-16 17:39
星辰雁
Rank: 4
等 级:业余侠客
威 望:1
帖 子:93
专家分:275
注 册:2011-9-10
收藏
得分:2 
我们刚接触栈,来跟各位大神先学习学习……

不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!
2012-03-16 17:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
小曹的理解稍微有点偏差。邪恶的W的目的是尽可能的利用内存分配给栈用,你的设计方案相当于直接把一半的内存用于管理,而实际栈数据使用的内存只有所有内存的一半。这在内存使用效率上太低了。请偿试改进策略。另外,关于这种进程用栈,尽量考虑设计成类型无关的。

zaixuexi同学有个特点,每个回贴的末尾都会加那个戴墨镜抽烟的表情。个人爱好,还是想表达点什么?其实我个人觉得,那个表情挺傻的。

重剑无锋,大巧不工
2012-03-16 21:17
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:2 
回复 32楼 zaixuexi
呵呵,每个人有自己想法。

晚安。我也睡了。

用心做一件事情就这么简单
2012-03-17 00:17
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:2 
好吧 我来围观各位

想象力征服世界
2012-03-17 17:07
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
收藏
得分:0 
楼主再新建个帖子 然后把这个帖子沉了吧 论坛不能一到这些问题就吵来吵去的
咱就一版主 只是期望能看到更多有价值的东西

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-03-17 17:07
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
清理一下,删了的是找不回来了,没删的觉得哪个不妥可以提出来接着删。原贴主人们也不必太在意,删的多了可能会有误删的情况。

删贴的原因只有一个,回到正题讨论这个问题的解决方案。

关于我个人,我正在考虑把个人简历放在空间里,免得被人误会编程没几天,然后老拿资历来和我说事。

本人爱好编程,但不以其为业。从Hello World算起,编程十余载,写的代码不足百万,但数十万行还是有的。有统计的毕业设计中的代码就超过两万行。阅读代码无算。

重剑无锋,大巧不工
2012-03-17 18:11
快速回复:在一段连续空间里面,维护N个stack
数据加载中...
 
   



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

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