您的位置:逆风者 数据结构 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:28 来源:未知

本文章共1861字,分2页,当前第1页,快速翻页:
 

教学目的: 掌握栈的存储表示方式和栈基本操作的实现方法

教学重点: 栈的基本操作实现方法,栈的应用

教学难点: 栈的存储表示

实验内容:

逆风编程精品

一、栈的实现

实现栈的顺序存储。

栈实现示例

#include<stdio.h>

#include<malloc.h>

#include<conio.h>



#define ERROR 0

#define TRUE 1

#define FALSE 0

#define OK 1

#define EQUAL 1

#define OVERFLOW -1

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10



typedef int Status ;



struct STU{

  char name[20];

  char stuno[10];

  int age;

  int score;

};

typedef struct STU SElemType;



struct STACK

{

  SElemType *base;

  SElemType *top;

  int stacksize;

};



typedef struct STACK SqStack;

typedef struct STACK *pSqstack;



Status InitStack(SqStack  **S);

Status DestroyStack(SqStack *S);

Status ClearStack(SqStack *S);

Status StackEmpty(SqStack S);

int StackLength(SqStack S);

Status GetTop(SqStack S,SElemType *e);

Status Push(SqStack *S,SElemType e);

Status Pop(SqStack *S,SElemType *e);

Status StackTraverse(SqStack S,Status (*visit)());



Status InitStack(SqStack **S)

{

  (*S)=(SqStack *) malloc(sizeof(SqStack));

  (*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));

  if(!(*S)->base)exit(OVERFLOW);

  (*S)->top=(*S)->base;

  (*S)->stacksize=STACK_INIT_SIZE;

  return OK;

}



Status DestroyStack(SqStack *S)

{

 free(S->base);

 free(S);

}



Status ClearStack(SqStack *S)

{

  S->top=S->base;

}



Status StackEmpty(SqStack S)

{

  if(S.top==S.base) return TRUE;

  else

    return FALSE;

}



int StackLength(SqStack S)

{

  int i;

  SElemType *p;

  i=0;

  p=S.top;

  while(p!=S.base)

    {p  ;

     i  ;

    }

}



Status GetTop(SqStack S,SElemType *e)

{

  if(S.top==S.base) return ERROR;

  *e=*(S.top-1);

  return OK;

}



Status Push(SqStack *S,SElemType e)

{

 /*

  if(S->top - S->base>=S->stacksize)

   {



     S->base=(SElemType *) realloc(S->base,

	    (S->stacksize   STACKINCREMENT) * sizeof(SElemType));

     if(!S->base)exit(OVERFLOW);

     S->top=S->base S->stacksize;

     S->stacksize  = STACKINCREMENT;

   }

  */



  *(S->top  )=e;

  return OK;

}



Status Pop(SqStack *S,SElemType *e)

{

  if(S->top==S->base) return ERROR;

  *e=*--S->top;

  return OK;

}



Status StackPrintElem(SElemType * e)

{

  printf("%s  %s  %d  %d\n",e->name,e->stuno,e->age,e->score);

}

Status StackTraverse(SqStack S,Status (*visit)())

{

  while(S.top!=S.base)

     visit(--S.top);

}



main()

{

  SElemType e;

  SqStack *Sa;



  clrscr();



  printf("\n\n-------------------SqStack Demo is running...----------------\n\n");

  printf("First is Push function.\n");



  InitStack(&Sa);



  strcpy(e.name,"stu1");

  strcpy(e.stuno,"100001");

  e.age=80;

  e.score=1000;



  printf("   Now Stack is Empty.\n");

  StackTraverse(*Sa,StackPrintElem);



  Push(Sa,e);



  printf("   Now Stack has one element.\n");

  StackTraverse(*Sa,StackPrintElem);



  strcpy(e.name,"stu3");

  strcpy(e.stuno,"100002");

  e.age=80;

  e.score=1000;

  Push(Sa,e);

  printf("   Now Stack has another element.\n");

  StackTraverse(*Sa,StackPrintElem);



  printf("   Now Pop Stack,the top elem put into variable e.\n");

  Pop(Sa,&e);

  printf("%s\n%s\n%d\n%d\n",e.name,e.stuno,e.age,e.score);



  printf("   Let's see the left of Stack's elem:\n");

  StackTraverse(*Sa,StackPrintElem);



  getch();

  printf("\n\n\nWelcom to visit  
 
本文章更多内容1 - 2 - 下一页>>
相关文章

数据结构教程 第三十三课 哈希表(二)
数据结构教程 第一课 数据结构的基本概念和
五子棋算法
数据结构教程 第三十九课 索引文件
数据结构教程 第十四课 串的定义
数据结构教程 第二十三课 二叉树的存储结构
C语言完成一个学生成绩管理程序
数据结构教程 第二十九课 静态查找表(一)
数据结构教程 第十三课 队列
数据结构教程 第四课 算法效率的度量和存储
数据结构教程 第八课 线性表的链式表示与实
数据结构教程 第十五课 串的表示和实现
数据结构教程 第三十四课 插入排序,快速排
数据结构教程 第十八课 数组的顺序表示与实
数据结构教程 第七课 实验一 线性表的顺序存
数据结构教程 第二课 抽象数据类型的表示与
二叉树基本操作的程序实现
数据结构教程 第三十七课 实验八 排序实验
数据结构教程 第二十八课 图的存储结构
数据结构教程 第十一课 栈的应用

相关评论


本文章所属分类:首页 数据结构

  热门关键字: