게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 스택구현인데 뭔가 이상합니다..(결과창 있어요)
게시물ID : computer_87759짧은주소 복사하기
작성자 : 등교의고통
추천 : 0
조회수 : 322회
댓글수 : 1개
등록시간 : 2013/05/12 15:21:14

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int A[100],t[11],b[11],n=10,N=100;

void initMultiStack();
bool isfull(int n);
void push(int i,int e);
void showMultiStack();
void fullStackException(int i);
void moveStacksLeft(int l , int r);
void moveStacksRight(int l, int r);

int main()
{
 int k,i=0,e=0;

 initMultiStack();

 srand(time(NULL));
 for(k=0; k<100; k++)
 {
  i=rand()%10;
  e=rand()%100;
  push(i,e);
 }

 return 0;
}

void initMultiStack()
{
 int i;
 for(i=0; i<N; i++)
 {
  A[i]=-1;
 }
 for(i=0; i<n+1; i++)
 {
  t[i]=i*10;
  b[i]=i*10;
 }
}
bool isfull(int n)
{
 return b[n+1]==t[n];
}

void push(int i,int e)
{
 if(isfull(i))
 {
  showMultiStack();
  printf("                          %d 번째 스택 처리 완료\n",i);
  fullStackException(i);
  showMultiStack();
  printf("\n\n");
 }
 t[i]=t[i]+1;
 A[t[i]]=e;
}

void showMultiStack()
{
 int i,j;
 printf("top:  ");
 for(i=0; i<n; i++)
 {
  for(j=0; j<t[i]-b[i]; j++)
  {
   printf(" ");
  }
  if(t[i-1] == b[i] && i != 0)
  {
       //erase one letter
  }
  printf("%d",i);
  for(j=0; j < b[i+1]-t[i]-1; j++)
  {
   printf(" ");
  }
 }
 printf("\n");
 printf("       ");
 for(i=0; i < n; i++)
 {
  for(j=0; j < t[i]-b[i]; j++)
  {
   printf(":");
  }
  for(j=0; j<b[i+1]-t[i]; j++)
  {
   printf(".");
  }
 }
 printf("\n");
 printf("base: ");
 for(i=0; i <= n; i++)
 {
  printf("%d",i);
  for(j=b[i]; j<b[i+1]-1; j++)
  {
   printf(" ");
  }
 }
 printf("\n");
}

void fullStackException(int i)
{
 int k;
 for(k=i-1; k>=0; k--)
 {
  if(!isfull(k))
  {
   moveStacksLeft(k + 1, i);
   return;
  }
 }
 for(k=i+1; k< n; k++)
 {
  if(!isfull(k))
  {
   moveStacksRight(i+1,k);
   return;
  }
 }
 printf("\n");
 printf("run out of memory!");
 exit(0);
}

void moveStacksLeft(int l , int r)// k+1 ,i
{
 int k,j;
 for(k=l; k<r+1; k++)
 {
  for(j=b[k]+1; j<=t[k]; k++)
  {
   A[j-1]=A[j];
  }
  b[k]=b[k]-1;
  t[k]=t[k]-1;
 }
}

void moveStacksRight(int l, int r)//i+1,k
{
 int k,j;
 for(k=r; k>=l; k--)
 {
  for(j=t[k]; j>=b[k]+1; j--)
  {
   A[j+1]=A[j];
  }
  b[k]=b[k]+1;
  t[k]=t[k]+1;
 }
}

 

아까 질문올린거지만 다중스택 구현하는 코드인데요...의사코드 보고 짠건데 저 빨간부분은 도저히 무슨 소린지 모르겠네요....

 

 

이게 정상적인 출력화면 이랍니다....

 

 

그리고 저의 나사가 여러개 빠진듯한 출력창

 

 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호