您的位置:首页 > 其它

第三章:栈和队列

2010-12-13 20:49 260 查看
栈:是限制仅在表的一端进行插入和删除运算的线性表,通常称插入.删除的这一端为栈顶,另一端为栈底,当表中没有元素是称为空栈

栈的基本运算有六种:

(1) IntStack(s);//构造一个空栈。

(2)StackEmpty(s);//判栈空。

(3)StackFull(s);//判栈满。

(4)Push(s,x);//进栈。

(5)Pop(s);//退栈。

(6)StackTop(s);//取栈顶元素。

链栈:栈的链式存储结构。

队列:也是一种运算首先得线性表,它只允许在表的一端进行进入,而在另一端进行删除。允许删除的一段为队头,允许插入的一段称为队尾

顺序队列的基本运算:

#ifndef dui

typedef struct
{
int front;//头指针
int rear;//尾指针
int count;//计数器,记录队中元素总数。
char data[100];
}cirqueue;

void initqueue(cirqueue *q);
int queueempty(cirqueue *q);
int queuefull(cirqueue *q);
void enqueue(cirqueue *q,char x);
char dequeue(cirqueue *q);
char queuefront(cirqueue *q);

#endif

#include <stdio.h>
#include <malloc.h>
#include "dui.h"

//指空队。

void initqueue(cirqueue *q)
{
q->rear=q->front=0;
q->count=0;
}

//判队空。

int queueempty(cirqueue *q)
{
return q->count==0;

}

//判队满。
int queuefull(cirqueue *q)
{
return q->count==100;
}

//入队

void enqueue(cirqueue *q,char x)
{
//if(queuefull(q))
// printf("duiman");
//else
// {
q->count++;
q->data[q->rear]=x;
q->rear=(q->rear+1)%100;
//}
}
//出队

char dequeue(cirqueue *q)
{
char temp;
//if(queueempty(q))
// { printf("duiman");
/// return 0;}
// else
// {
temp=q->data[q->front];
q->count--;
q->front=(q->front+1)%100;
return temp;

//}

}

//取队头元素。

char queuefront(cirqueue *q)
{

return q->data[q->front];
}

#include <stdio.h>
#include "dui.h"

main()
{
void initqueue(cirqueue *q);
int queueempty(cirqueue *q);
int queuefull(cirqueue *q);
void enqueue(cirqueue *q,char x);
char dequeue(cirqueue *q);
char queuefront(cirqueue *q);
cirqueue q;
char temp,t;
initqueue(&q);

printf("对是否为空? %s/n",queuefull(&q)? "bukong":"kong");

printf("入队a:/n");
enqueue(&q,'a');
printf("入队b:/n");
enqueue(&q,'b');
printf("入队c:/n");
enqueue(&q,'c');
printf("入队d:/n");
enqueue(&q,'d');

printf("取队头:");

t=queuefront(&q);
printf("%c/n",t);
printf("出队:");
while(!queueempty(&q))
{
temp=dequeue(&q);
printf("%c/n",temp);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: