您的位置:首页 > 其它

顺序栈、链栈基本操作

2008-01-03 09:44 323 查看
// Stack.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
//*
 #define STACK_MAX_SIZE 7
 int StackData[STACK_MAX_SIZE] = {'A','B','C','D','E','F','G'};
//*/
/*
 #define STACK_MAX_SIZE 14
 int StackData[STACK_MAX_SIZE] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N'};
*/
/*顺序栈类型定义*/
typedef struct
{
 int data[STACK_MAX_SIZE];
 int top;
}sqStack;
/*链栈类型定义*/
struct LinkStack
{
 int data;
 struct LinkStack *link;
};
typedef struct LinkStack lkStack;
/*顺序栈基本操作函数定义部分*/
void sqInitialize(sqStack *stack)
{
 stack->top = 0; 
}

int sqIsEmpty(sqStack *stack)
{
 if(stack->top == 0)
  return(1);
 else
  return(0);
}

int sqIsFull(sqStack *stack)
{
 if(stack->top >= STACK_MAX_SIZE)
  return(1);
 else
  return(0);
}

int sqPush(sqStack *stack,int data)
{
 if(sqIsFull(stack))
 {
  printf("堆栈已満!/n");
  return(0);
 }
 else
 {
  stack->data[stack->top++] = data;
  return(1);
 }
}

int sqPop(sqStack *stack,int *p)
{
 if(sqIsEmpty(stack))
 {
  printf("堆栈已空!/n");
  return(0);
 }
 else
 {
  *p = stack->data[--stack->top];
  return(1);
 }
}

int sqGetTop(sqStack *stack,int *p)
{
 if(sqIsEmpty(stack))
 {
  printf("堆栈已空!/n");
  return(0);
 }
 else
 {
  *p = stack->data[stack->top];
  return(1);
 }
}

void sqWriteValue(sqStack *stack,int array[],int n)
{
 int i;
 for(i=0;itop-1,array[i]);
}

void sqPrintValue(sqStack *stack)
{
 int StackData,i;
 i=0;
 while(sqPop(stack,&StackData))
  printf("Stack[%d] = %c/t",stack->top,StackData);
 printf("/n");
}
/*链栈基本操作函数定义部分*/
void lkInitialize(lkStack *top)
{
 top = NULL;
}

int lkIsEmpty(lkStack *top)
{
 if(top == NULL)
  return(1);
 else
  return(0);
}

int lkPush(lkStack  *top,int data)
{
 lkStack  *q;
 q = (lkStack  *)malloc(sizeof(lkStack));
 if(q==NULL)
  return(0);
 else
 {
  q->data = data;
  q->link = NULL;
  top->link = q;
  top = q;
  return(1);
}

int lkPop(struct LinkStack  *stack,int *p)
{
 struct LinkStack  *q;
 if(lkIsEmpty(stack))
 {
  printf("堆栈已空!/n");
  return(0);
 }
 else
 {
  q = stack;
  *p = stack->data;
  stack = stack->next;
  //free(q);
  return(1);
 }
}

int lkGetTop(struct LinkStack  *stack,int *p)
{
 if(lkIsEmpty(stack))
 {
  printf("堆栈已空!/n");
  return(0);
 }
 else
 {
  *p = stack->data;
  return(1);
 }
}

void lkWriteValue(struct LinkStack  *stack,int n)
{
 int i;
 for(i=0;iTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935482
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: