数据结构实验报告内容模板

 

第二篇:数据结构实验二报告模板

数据结构 实验2

回文判断

班级:java092

    学号:200907092240

姓名:赵冬冬
实验一 回文判断

一、实验目的

熟练栈和队列的各种操作。

二、实验内容

1同时建立一个栈和一个队列,即:每从键盘上输入一个字符,就把它作为一个新的栈和队列结点的数据域,插入到栈和队列。这样就同时建立了一个栈和一个队列。然后,让栈出栈的同时队列出队,比较它们是相等。

2设计简单的程序实现回文判断的操作,加注释!

//回文判断.cpp

#include<stdio.h>

#include<stdlib.h>

typedef struct Node //定义队列结点类型

{

  char data; 

  struct Node *next;

}Linkqueuenode;

typedef struct {

  Linkqueuenode *front;//定义队列的对首指针

  Linkqueuenode  *rear;//定义队列的对尾指针

}Linkqueue;

typedef struct node //定义栈结点类型

{

  char data;

  struct node *next;

}LinkStackNode,*LinkStack;

void push( LinkStack top,char x) //进栈

{

  LinkStackNode *temp;  //创建新结点

  temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));//分配空间

  temp->data=x;//接点赋值

  temp->next=top->next;

  top->next=temp;//数据进栈

}

void getinmain() //功能界面

{

  printf(" \t\t__________________________________________\n");

  printf("\t\t\t\t回文检测\t\t\n");

  printf("\n\n");

  printf("\t\t\t\t1. 输入字符串\n");

  printf("\t\t\t\t2. 检测是否为回文 \n");

  printf("\t\t\t\t3. 退出 \n");

  printf("\n请按指定的数字进行相应的操作:\n");

}

int queue(Linkqueue *q) //初始化队列

{

  q->front=(Linkqueuenode *)malloc(sizeof(Linkqueuenode));//队列分配空间

  if(q->front!=NULL)//判断队是否为空

  {

    q->rear=q->front;//初始化队,使队为空

    q->front->next=NULL;

    return 1;

  }

  else return 0;

}

int enter(Linkqueue *q,char  x) //入队操作

{

  Linkqueuenode *newnode;//创建新结点

  newnode=(Linkqueuenode *)malloc(sizeof(Linkqueuenode));//队列分配空间

  if(newnode!=NULL)

  {

    newnode->data=x;//结点赋值

    newnode->next=NULL;

    q->rear->next=newnode;//数据入队

    q->rear=newnode;

    return 1;

  }

  else return 0;

}

void pushenter(LinkStack top,Linkqueue *q) //一个元素同时进栈和入队

{

  printf("请输入元素并以$结束\n");

  char x;//进栈和入队的元素

  scanf("%c",&x);

  while(x!='$')//输入$字符是停止循环

  {

    push(top,x);enter(q,x);scanf("%c",&x);//元素同时进栈和入队

  }

  printf("数据进栈入列成功!\n");

}

void check(LinkStack top,Linkqueue  *p)//检测是否为回文数

{

  char a,b;

  int c=0;

  Linkqueuenode *q;

  LinkStack w;

  w=top->next;

  q=p->front->next;

  while(q!=NULL&&w->next!=NULL)//判断队列和栈是否为空

  {

    a=w->data;//队列和栈不为空则进行出队和出栈操作

    b=q->next->data;

    q=q->next;

    w=w->next;

    printf("a=%c b=%c\n",a,b);

    if(a!=b)//检测是否为回文数

       {

         c=1;

         printf(">>>>>>>>>>>>>>>>不为回文<<<<<<<<<<<<<<<<<\n");

      break;     

       }

  }

  if(c==0)

     printf("\n>>>>>>>>>>>>>>>>为回文<<<<<<<<<<<<<<<<<\n");

}

void main()

{

  LinkStackNode top;//声明一个栈结点

  top.next=NULL;//将栈顶值为空

  Linkqueue q;

  queue(&q);//初始化队列

  system("pause");

  system("cls");

  s: getinmain();//进入功能选择界面

  int b;

  scanf("%d",&b);//选择功能

  switch(b)

  {

   case 1:pushenter(&top,&q);system("pause");system("cls");

        goto s;

   case 2:check(&top,&q);system("pause");system("cls");

        goto s;

   case 3:exit(0);

  };

}

//实现各子函数并且加注释

运行结果如下图:

1、主菜单运行图

2、输入数据

2、检验是否为回文

三、编程并上机调试运行 

四、时间、地点

       20##-4-8(星期五)软件学院机房

五、指导教师   邢莹

(在书写过程中若出现错误,望老师指出,谢谢)

相关推荐