关闭

第八章十六题修改后POWERBY KTL

404人阅读 评论(0) 收藏 举报

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#define M 10
typedef char datatype;

typedef struct
{
 datatype data[M];
 int rear,quelen;
}sequeue;
void SETNULLQS(sequeue *sq)
{
 sq->rear=M-1;
 sq->quelen=0;
}

bool EMPTYQS(sequeue *sq)
{
 if(sq->quelen==0)
  return true;
 else return false;
}//判断队空函数;

int ENQUEUEQS(sequeue*sq,datatype x)
{
 if(sq->quelen==M){
  printf("队满上溢。/n");
  return 0;
 }
 else{
  sq->rear=(sq->rear+1)%M;
  sq->data[sq->rear]=x;
  sq->quelen++;
  return 1;
 }
}//入队

datatype DEQUEUEQS(sequeue *sq)
{
 datatype temp;
 int front;
 if(EMPTYQS(sq))
 {
  printf("队空下溢。/n");
  return 0;
 }
 else{
  front=sq->rear-sq->quelen+1;
  temp=sq->data[front];
  sq->quelen--;
  return(temp);
 }
}//出队,利用了front=rear-quelen的性质;

void MyPrintf(sequeue *sq)
{
 int front;
 front=sq->rear-sq->quelen+1;
 if(front==sq->rear+1)
  printf("队空/n");
 while(front!=sq->rear+1){
  printf("%c",sq->data[front]);
  front++;
 }
 printf("/n");
 return;
}//自己编写的打印函数;

int main()
{
 datatype ch;
 sequeue *sq;
 sq=(sequeue*)malloc(sizeof(sequeue));
 SETNULLQS(sq);//置空队;
 if(EMPTYQS(sq))
  printf("队空/n");
 else
  printf("队非空/n");
 printf("请输入字符(空格结束):");
 while(1){
  ch=getche();
  if(ch==' ')
  {
 //  if(!(ENQUEUEQS(sq,'/0')))//如果是空格的话,就把'/0'入栈;
 //   break;
   break;
  }
  if(!(ENQUEUEQS(sq,ch)))
   break;
 }
 MyPrintf(sq); 
 while(1)
 {
  int i=0;
  ch=DEQUEUEQS(sq);
  if(i==sq->quelen)
   break;
  printf("%c/n",ch);
  MyPrintf(sq);//调用自己编写的MyPrintf,原因是普通printf无法打印出队内的字符;
  i++;
 }
 return 0;
}

 


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34029次
    • 积分:746
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条