
建立顺序循环队列SeqQueue编写程序判断一个字符序列是否是回文。
#include #include #define SIZE 20 int isPalindrome(char []); \\\/* Prototype only send the number and type of arguments to the Compiler. *\\\/ main() { \\\/*Local Declarations*\\\/ char str[SIZE]; \\\/*Statements*\\\/ printf(请输入字符串,以回车结束:\\\ ); scanf(%s,str); \\\/*Record the string.*\\\/ if(isPalindrome(str)==0) \\\/*The string is not a palindrome.*\\\/ { printf(The string is not a palindrome.\\\ ); } else \\\/*The string is a palindrome.*\\\/ { printf(The string is a palindrome.\\\ ); } system(pause); return 0; } int isPalindrome(char array[]) { int i,num_str=0; for(i=0;array[i]!='\\\\0';i++)\\\/*Count how many characters there are in the string.*\\\/ { num_str++; } i=0; while((array[0+i]==array[num_str-i-1])&&(i # include # include # define MAX 50 int cycle(char *s) { char *h,*t; for(h=s,t=s+strlen(s)-1;t>h;h++,t--) if(*h!=*t) break; return t<=h; } main() { char s[MAX]; clrscr(); while(1) { puts(Please input the string you want to judge (input ^ to quit):); scanf(%s,s); \\\/*当输入的字符串的第一个字符是^时,退出*\\\/ if(s[0]=='^') break; if(cycle(s)) printf( %s is a cycle string.\\\ ,s); else printf( %s is not a cycle string.\\\ ,s); }getch(); }
1)建立顺序循环队列SeqQueue。
2)编写程序判断一个字符序列是否是回文。
#include #include sys\\\/malloc.h#include #define MaxSize 100typedefchar ElmType;typedefstruct{ ElmType data[MaxSize]; int front,rear,count;}SqQueue;\\\/\\\/初始化SqQueue *InitQueue(){ SqQueue *q=(SqQueue *)malloc(sizeof(SqQueue)); q->data[0]=NULL; q->front=q->rear=q->count=0; return q;}\\\/\\\/判空int QueueEmpty(SqQueue *q){ return(q->count==0);}\\\/\\\/判满int QueueFull(SqQueue *q){ return((q->rear+1)%MaxSize==q->front);}\\\/\\\/插入数据:失败返回0,成功返回1int enQueue(SqQueue *q,char e){ \\\/\\\/数据满了 if(QueueFull(q)) return0; \\\/\\\/添加数据 q->data[q->rear++]=e; q->count++; return1; \\\/* q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; return 1;*\\\/}\\\/\\\/从前面删除数据char deQueueFromFront(SqQueue *q){ \\\/\\\/空序列,直接返回null if ((QueueEmpty(q))==1) returnNULL; char e=q->data[q->front++]; q->count--; return e; \\\/* q->front=(q->front+1)%MaxSize; e=q->data[q->front]; return 1;*\\\/}\\\/\\\/从后面删除数据char deQueueFromRear(SqQueue *q){ \\\/\\\/空序列,直接返回null if ((QueueEmpty(q))==1) returnNULL; char e=q->data[--q->rear]; q->count--; return e; \\\/* e=q->data[q->rear]; q->rear=(q->rear-1+MaxSize)%MaxSize; return 1;*\\\/}int isHuiWen(SqQueue *q){ \\\/\\\/空,不是回文 if((QueueEmpty(q))==1) return0; int front=q->front; int rear=q->rear-1; while(frontdata[front]!=q->data[rear]) return0; front++; rear--; } return1;}int main(){ int i=0; SqQueue *q=InitQueue(); char a[99]; printf(please input the source:); scanf(%s,a); for(i=0;idata[q->front]==q->data[q->rear]) { j++; } } if(j>=strlen(a)\\\/2) printf(yes\\\ ); else printf(no\\\ ); return 0;*\\\/}
判断顺序循环队列为空和为满的标志是什么
队头指针head和队尾指针tail队空的标志是head和tail两个指针重合队满标志是tail在head前一位。
急
满意追加高分
关于顺序循环队列问题
scq->rear=(scq->rear +1)%queuesize;(少一个“+”)这句话不能去掉
如:queuesize = 5,当scq->rear==4时,则 (scq->rear+1)%queuesize == 0,即scq->rear ==0表示让其指向第0号了
这样才能循环啊
编写一个程序实现顺序循环队列的各种基本运算,并在此基础上设计一个主程序完成如下功能
#include #include #define Maxqsize 5typedef char ElemType;typedef struct { ElemType elem[Maxqsize]; int front,rear;}SqQueue; void InitQueue(SqQueue *&q) { q=(SqQueue *)malloc (sizeof(SqQueue)); q->front=q->rear=0; } void ClearQueue(SqQueue *&q) { free(q); } int QueueLength(SqQueue *q) { return (q->rear-q->front+Maxqsize)%Maxqsize; }int QueueEmpty(SqQueue *q){ return(q->front==q->rear);}int enQueue(SqQueue *&q,ElemType e){ if ((q->rear+1)%Maxqsize==q->front) return 0; q->rear=(q->rear+1)%Maxqsize; q->elem[q->rear]=e; return 1;} int deQueue(SqQueue *&q,ElemType &e){ if (q->front==q->rear) return 0; q->front=(q->front+1)%Maxqsize; e=q->elem[q->front]; return 1;} void main(){ ElemType e; SqQueue *q; printf((1)初始化队列Q\\\ ); InitQueue(q); printf((2)依次进队列元素A,B,C\\\ ); if (enQueue(q,'A')==0) printf(队满,不能进队\\\ ); if (enQueue(q,'B')==0) printf(队满,不能进队\\\ ); if (enQueue(q,'C')==0) printf(队满,不能进队\\\ ); printf((3)队列为%s\\\ ,(QueueEmpty(q)?空:非空)); if (deQueue(q,e)==0) printf(队空,不能出队\\\ ); else printf((4)出队一个元素%c\\\ ,e); printf((5)队列Q的元素个数:%d\\\ ,QueueLength(q)); printf((6)依次进队列元素D,E,F\\\ ); if (enQueue(q,'D')==0) printf(队满,不能进队\\\ ); if (enQueue(q,'E')==0) printf(队满,不能进队\\\ ); if (enQueue(q,'F')==0) printf(队满,不能进队\\\ ); printf((7)队列Q的元素个数:%d\\\ ,QueueLength(q)); printf((8)出队列序列:); while (!QueueEmpty(q)) { deQueue(q,e); printf(%c ,e); } printf(\\\ ); printf((9)释放队列\\\ ); ClearQueue(q);}
请问循环队列插入和删除元素的操作顺序
插入的先存元素还是先动尾指针是没有关系的,你要明白的是插入节点时得先mallocNode*类型点,这时你并没有初始化这个节点,只是给它分配了sizeof(Node)大小的空间,而Node*是包含两个域的,一个是数据域,一个是指针域,它们是结构体Node*的两个成员,所以不论是先给数据域赋值还是指针域赋值都是没有关,都可以的。
而删除时侯,你先用一个节点保存你要删除的那个节点,然后把要删除的前驱节点的指针指向要删除的节点的后继节点,所以只要你先保存要删除的那个节点的话,先移指针还是先存数据时没有关系的。
如果你没保存你要删除的那个节点,而是直接把要删除的节点的前驱节点的指针指向后继节点的话,就得先存数据,不过这是你就没把要删除节点的内存释放掉,会出现内存泄露,不知道我讲清楚了没有。
不好意思,我看成是链表了,队列的话插入元素当然得先移指针,后插入数据。
删除的时候先保存数据,后移指针。
采用顺序存储实现循环队列的初始化、入队、出队操作。
#include#define MAXSIZE 100typedef struct seqqueue{int data[MAXSIZE];int front;int rear;}seqqueue;void Initseqqueue(seqqueue &q) \\\/\\\/循环初始{q.front =q.rear=0;printf(初始功
\\\ );}int enqueue(seqqueue &q,int e) \\\/\\\/数据元素e入队列{if((q.rear+1)%MAXSIZE==q.front){printf(循环队列满!\\\ );return 0;}else{q.data[q.rear]=e;q.rear=(q.rear+1)%MAXSIZE;printf(%d入队列成功!\\\ ,e);return 1;}}int isemptyqueue(seqqueue &q) \\\/\\\/判断循环队列是否为空{if(q.rear ==q.front ){printf( 空队列!\\\ );return 1;}else{printf(非空队列!\\\ );return 0;}}int dequeue(seqqueue &q,int &e) \\\/\\\/数据元素出队列,出队列元素暂存储于e中{if(!isemptyqueue(q)){e=q.data [q.front ];q.front =(q.front +1)%MAXSIZE;printf(出队列成功!\\\ );return 1;}else{printf(出队列失败!\\\ );return 0;}}void main(){int x=0;seqqueue qa;Initseqqueue(qa);isemptyqueue(qa);dequeue(qa,x);enqueue(qa,25);isemptyqueue(qa);dequeue(qa,x);}
循环队列是队列的一种顺序存储结构吗
是的····顺序存储就是指用一组连续的存储单元依次存储,链式存储内存中地址不是挨着的,循环队列增设了两个指针头指针和尾指针,实现空间的最大利用