第8章第16题的完整程序(Powered by biggates)

原创 2006年05月26日 16:28:00

/// 8_16.cpp : 假设以数组sequ[m]存放循环队列的元素,同时设变量

/// rear 和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。

/// 试给出判别此循环队列的队满条件,并写出相应的入队列和出队列的算法。

/// 说明:本程序之所以不用typedef 把char定义成datatype,是因为:

/// 在C语言中没有输入输出的重构函数,所以即使把char定义成datatype,

/// 在处理输入输出的时候仍然要面对众多的 %d、%c之类,反而容易引起错误

/// 因此,为了使问题更加便于理解,采用了char而不是datatype。

 

#include "stdafx.h"

#include <stdlib.h>

#include <conio.h>

 

const int MAXSIZE = 10;

 

typedef struct sequeue

{

        char sequ[MAXSIZE];

        int rear;

        int quelen;

}sequeue;

 

// 显示队列的函数

void PrintQueue(sequeue* head)

{

        if(head == NULL || head->quelen <= 0)

        {

        printf("这是一个空列表。/n");

        return;

        }

 

        for(int i = 0; i < head->quelen; i++)

        {

                printf("%c", head->sequ[

                        (head->rear - head->quelen + i + 1 + MAXSIZE) % MAXSIZE

                                                                ]);

                //注意这句,在纸上画一下比较好理解

        }

 

        printf("/n");

 

        return;

}

 

//判断队列是否满的函数

bool IsFull(sequeue* head)

{

        if (head == NULL)

        {

                printf("队列不存在!/n");

 

                //返回真,防止在非法队列中进行的入队操作

                //因为一般情况下不会对一个满队列进行入队

                return true;

        }

 

        if (head->quelen == MAXSIZE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

 

//入队函数

char* EnQueue(sequeue* head, char data)

{

        printf("入队:%c/t/t", data);

 

        if (IsFull(head))

        {

                printf("入队失败!/n");

                return NULL;

        }

 

        if (head->rear + 1 >= MAXSIZE)

        {

                head->rear -= MAXSIZE;

        }

 

        head->sequ[head->rear + 1] = data;

        head->rear += 1;

 

        head->quelen += 1;

 

        PrintQueue(head);

 

        return &(head->sequ[head->rear - 1]);

}

 

//出队函数

char DeQueue(sequeue* head)

{

        printf("出队:");

 

        if (head->quelen <= 0)

        {

                printf("出队失败!/n");

                return -1;

        }

 

        int tempdata = head->sequ[(MAXSIZE + head->quelen - head->rear + 1) % MAXSIZE];

 

        head->quelen -= 1;

 

        if(head->rear >= MAXSIZE)

        {

                head->rear -= MAXSIZE;

        }

 

        printf("%c/t/t", tempdata);

 

        PrintQueue(head);

 

        return tempdata;

}

 

//带提示的出队函数

char DeQueueWithData(sequeue* head)

{

        char temp = DeQueue(head);

        if(temp != -1)

        {

                printf("%c已经出队/n", temp);

        }

 

        return temp;

}

 

//带提示的入队函数

void EnQueueWithData(sequeue* head)

{

        char temp;

        printf("请输入一个字母:");

        temp = getche();

        printf("/n");

        EnQueue(head, temp);

}

 

//队列初始化函数

void InitialQueue(sequeue* head)

{

        head->quelen = 0;

        head->rear = MAXSIZE - 1;

 

        for(int i = 0; i < MAXSIZE; i ++)

        {

                head->sequ[i] = 0;

        }

}

 

//输入字符串的函数

sequeue* InputList(void)

{

        sequeue* head = NULL;

 

        head = (sequeue*)malloc(sizeof(sequeue));

 

        if (head == NULL)

        {

                printf("内存分配出错!/n");

                return NULL;

        }

 

        InitialQueue(head);

 

        char ch = ' ';

 

        printf("请输入一个字符串:/n");

 

        ch = getchar();

 

        while(ch != '/n' && !IsFull(head))

        {

                EnQueue(head, ch);

                ch = getchar();

        }

 

        return head;

}

 

int main(int argc, char* argv[])

{

        sequeue* head = NULL;

 

        char ch = 'y';

 

 

        head = InputList();

 

        PrintQueue(head);

 

        while(ch != 27)

        {

                printf("请输入E入队,D出队,ESC退出/n");

 

                ch = getch();

 

                switch(ch)

                {

                case 'd':

                case 'D':

                        DeQueueWithData(head);

                        break;

 

                case 'e':

                case 'E':

                        EnQueueWithData(head);

                        break;

 

                default:

                        break;

                }

        }

        return 0;

}

第8章第11题的完整程序(Powered by biggates)

由于篇幅比较长,请访问http://spaces.msn.com/biggates/blog/cns!715707C35A631274!279.entry
  • spritsq
  • spritsq
  • 2006年05月26日 17:39
  • 459

第10章第16题完整代码(cpp) (Powered by biggates)

/// 10_16 利用图的深度优先搜索和广度优先搜索各写一个算法,/// 判别以邻接表方式表示的有向图中是否存在由顶点/// vi到顶点vj的路径(i!=j) #include "stdafx.h"...
  • spritsq
  • spritsq
  • 2006年06月08日 00:13
  • 526

第10章第16题定义(h) (Powered by biggates)

/// Chapter10.h: 第十章的结构定义和函数声明 const int NUM_OF_VEX = 8;                //顶点数 //以下是邻接矩阵的定义typedef st...
  • spritsq
  • spritsq
  • 2006年06月08日 00:16
  • 542

第11章第15题完整代码(cpp) (Powered by biggates)

/// 11_15.cpp: 编写对一组关键字,利用链地址法解决冲突,/// 散列函数为H(k),写出在此散列表中插入、删除元素的算法 #include "stdafx.h"#include #inc...
  • spritsq
  • spritsq
  • 2006年06月12日 15:57
  • 568

第11章第15题定义代码(h) (Powered by biggates)

/// Chapter11.h: 第11章数据结构 typedef int keyType;                //以int类型作为散列值类型typedef char dataType; ...
  • spritsq
  • spritsq
  • 2006年06月12日 16:01
  • 520

学习opencv第六章习题5 , 使用x,y阶层数求出图像内唯一直线的角度

#include #include #include #include using namespace std; const CvSize size = cvSize(200,200); c...
  • fdl19881
  • fdl19881
  • 2011年08月25日 15:47
  • 2755

《C Primer Plus(第五版)中文版》第6章第1至16题

1、编写一个程序,创建一个具有26个元素的数组,并在其中存放26个小写字母,并让该程序显示该数组的内容。 #include int main(void){ char c[26]; int i;...
  • vs9841
  • vs9841
  • 2015年03月22日 21:03
  • 1518

Python编写一些小玩意儿(《Python核心编程》第11章)

本人理科学生狗,本科时抱着自己以后绝不会从事计算机相关工作的态度而对编程敬而远之,大一学习C++也是苦不堪言,期末背背书上的代码,勉强及格,大二之后再也没有碰过。 对于我这样一个编程菜鸟来说,Pyt...
  • zuolixiangfisher
  • zuolixiangfisher
  • 2015年07月05日 16:35
  • 216

第10章第8题

myList.h#ifndef MYLIST_H_#define MYLIST_H_#includeconst int Len = 10;class myList{ private: double ...
  • qazaq408
  • qazaq408
  • 2017年03月09日 20:01
  • 45

学习opencv 习题答案-第五章

/* 5_5 我放置了一包烟 */ #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "stdio.h" u...
  • luoshixian099
  • luoshixian099
  • 2014年11月26日 13:22
  • 1011
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第8章第16题的完整程序(Powered by biggates)
举报原因:
原因补充:

(最多只允许输入30个字)