顺序栈、链栈基本操作

原创 2007年10月12日 19:05:00

// 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;i<n;i++)
  if(sqPush(stack,array[i])) printf("Stack[%d] = %c/t",stack->top-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;i<n;i++)
  if(lkPush(stack,i*10)) printf("Stack[%d] = %d/t",i,i*10);
}


void lkPrintValue(struct LinkStack  *stack,int n)
{
 int StackData,i;
 i=0;
 for(i=0;i<n;i++)
 {
  lkPop(stack,&StackData);
  printf("Stack[%d] = %d/t",i++,StackData);
 }
 printf("/n");
}

int main(int argc, char* argv[])
{
 sqStack *stack1;
 struct LinkStack  *stack2;
  //顺序栈处理部分
 sqInitialize(stack1);
 printf("/n顺序栈[入栈]数据........./n");
 sqWriteValue(stack1,StackData,STACK_MAX_SIZE);
 printf("/n顺序栈[出栈]数据........./n");
 sqPrintValue(stack1);
 /*
 //链栈处理部分
 lkInitialize(stack2);
 printf("/n链栈入栈数据........./n");
 lkWriteValue(stack2,10);
 printf("/n链栈出栈数据........./n");
 lkPrintValue(stack2,10);
 */
 return 0;
}
 

【数据结构】顺序栈的基本操作操作---C/C++

本博客所有文章均已迁入到http://www.coderbean.com//头文件内容 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 stru...
  • coderbean
  • coderbean
  • 2015年08月16日 18:49
  • 2580

栈的基本操作(采用顺序存储结构)

关于栈的基本操作,记录一下,方便以后查看。包括栈的初始化、入栈、出栈、清空栈、销毁栈、获取已入栈元素个数 #include #include #define TRUE 1 #define ...
  • jiajiayouba
  • jiajiayouba
  • 2013年06月14日 11:25
  • 12797

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置。通常以top=-1表示空栈。代码...
  • yanxiaolx
  • yanxiaolx
  • 2016年05月29日 13:43
  • 5262

\链栈,双向顺序栈,基本操作,很简单,自己写的

  • 2009年06月24日 14:17
  • 2KB
  • 下载

顺序栈基本操作

  • 2017年03月04日 16:03
  • 20KB
  • 下载

顺序栈基本操作

  • 2017年04月14日 14:26
  • 823B
  • 下载

8583 顺序栈的基本操作

  • 2013年06月04日 23:49
  • 2KB
  • 下载

顺序栈的基本操作和实现

  • 2011年11月22日 19:31
  • 153KB
  • 下载

顺序栈和链栈的基本操作

SqStack.h   //**********一些预定义常量和类型*********** #define TRUE 1 #define FALSE 0 #define OK 1 #define E...
  • u014738304
  • u014738304
  • 2014年11月25日 14:28
  • 438

数据结构顺序栈和链栈基本操作----c++实现

顺序栈: #include using namespace std; #define MaxSize 50 class SeqStack{ private: int data[MaxSize]...
  • supersnow0622
  • supersnow0622
  • 2012年11月25日 16:48
  • 4229
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:顺序栈、链栈基本操作
举报原因:
原因补充:

(最多只允许输入30个字)