第八章十六題修改後POWERBY KTL

#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;
}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章