是不是用到操作系统碎片整理的相关知识啊?
话说要依情况移动栈?
连接的内存空间完全被栈占用吗?
可以用一小部分建表什么的吗?
话说要依情况移动栈?
连接的内存空间完全被栈占用吗?
可以用一小部分建表什么的吗?
为游戏狂~~!! 大家努力编哈!
#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); } }