栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构实验说明书

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构实验说明书

实验二:栈与队列

实验目的:使学生深入了解栈与队列的特性,以便在实际背景下灵活运用他们,同时还将巩固这两种结构的构造方法。

实验题目:

1. 检测表达式中{},[],()扩号匹配算法.

2.检测字符串是否回文的算法

栈与队列

代码如下(示例):

#include "stdio.h"

#include "string.h"

#include "malloc.h"

#define STACK_INIT_SIZE 30

#define STACKINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef char SElemType;

typedef struct

 { SElemType *base;

   SElemType *top;

   int stacksize;

 } SqStack;

//-----------初始化栈------------

 Status InitStack(SqStack &S)

 { S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

   if(!S.base) return ERROR;

   S.top=S.base;

   S.stacksize=STACK_INIT_SIZE;

   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 StackEmpty(SqStack S)

 { return (S.base==S.top);

 }

//--------------取栈顶元素----------------

 Status GetTop(SqStack S,SElemType *e)

 { if(StackEmpty(S)) return ERROR;

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

   return OK;

 }

//---------括号区配-----------------

int pair(char *s)

 { int i;

   char e;

   SqStack T;

   InitStack(T);

   for(i=0;i<(int)strlen(s);i++)

     { if (s[i]=='('||s[i]=='[') Push(T,s[i]);

       if (s[i]==')')

   { if(!GetTop(T,&e)) return ERROR;

       else if (e=='(') Pop(T,&e);

       else return ERROR;

   }

       if (s[i]==']')

   { if(!GetTop(T,&e)) return ERROR;

       else if(e=='[') Pop(T,&e);

     else return ERROR;

   }

      }

   return (StackEmpty(T));

  }

//--------------回文-----------------------

 int Ishuiwen(char *s)

 { SqStack T;

   int i,l;

   char c;

   InitStack(T);

   l=(int)strlen(s);

   for(i=0;i

     Push(T,s[i]);

   while(!StackEmpty(T))

    { Pop(T,&c);

      if(c!=s[l-i]) return ERROR;

      i--;

    }

   return OK;

 }

//--------------主函数------------

int main()

{

 //验证部分

char s[80],d;

gets(s);

   

   d=Ishuiwen(s);

   if(d) printf("YES");

 else printf("NO");

return 0;

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号