CSDN博客

img hongweijin

堆栈

发表于2004/10/8 11:33:00  1014人阅读

//////////////////////////////////////////////////////////////////////////
// 设置一个顺序栈SS和一个链栈LS,实现以下操作:
// 从键盘输入若干个正整数(以输入负数为结束标志),依次压入SS中。
// 然后分别显示输入数据的逆序和正序的值(可以用LS辅助实现显示正序的值)
// **屏幕显示如下例所示:
// 3  4  6  8  9  2  -1
// 2  9  8  6  4  3
// 3  4  6  8  9  2
// 其中栈的算法实现可以参考第三章教案后面部分,
// 对顺序栈和链栈的PUSH操作要求用同样的函数名,
// (POP操作也一样)注意:C++中有函数重载的特性。
//
//////////////////////////////////////////////////////////////////////////

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

#define length 15

typedef struct Node *PtrToNode;
struct Node
{
 int  Element;
 PtrToNode Next;
};


PtrToNode pop(PtrToNode top, int Element);
PtrToNode push(PtrToNode top);
void  pop(int* top, int client);
int  push(int* top);

void main( void )
{
 /////////////////////////////////////////////////////
 // ss
 //
 int ss[length];
 
 int* top2;
 int* base2;
 int number;
 
 top2 = base2 = ss;
 while(1)
 {
  scanf("%d", &number);
  if((top2 - base2) < length)
   {
   pop(top2, number);
   top2++;
  }
   else
    printf("/nthe stack is full/n");
   if (number < 0)
   break;
 }
 top2 -= 2;
//////////////////////////////////////////////////////////////////////////
// sl
//
 PtrToNode top, base;
 int  Element;
 
 /*init the stack*/
 top = base = (PtrToNode)malloc(sizeof(Node));
 base->Next = NULL;
 base->Element = NULL;
 
 while(1)
 {
  if(top2 >= base2)
  {
   Element = push(top2);
   printf("%d ", Element);
   top2--;
  }
  else //the first number
   break;
  top = pop(top, Element);
 
 }

 printf("/n");
 
 while(1)
 {
  if (top != base)
  {
   printf("%d ", top->Element);
   top = push(top);
  }
  else
   break;
 }

}

//////////////////////////////////////////////////////////////////////////
// sl Function
//
PtrToNode pop(PtrToNode top, int Element)
{
 PtrToNode client;
 
 client = (PtrToNode)malloc(sizeof(Node));
 client->Next = top;
 top = client;
 top->Element = Element;
 return top;
}

PtrToNode push(PtrToNode top)
{
 PtrToNode client;

 client = top;
 top = top->Next;
 free(client);//free do the two thing free the space and set the client NULL
 return top;
}
//////////////////////////////////////////////////////////////////////////
// ss Founction
//
void pop(int *top, int client)
{
 *(top) = client;
}

int push(int *top)
{
 return *(top);
 *(top) = NULL; 
}

 

阅读全文
0 0

相关文章推荐

img
取 消
img