栈:是限制仅在表的一端进行插入和删除运算的线性表,通常称插入.删除的这一端为栈顶,另一端为栈底,当表中没有元素是称为空栈。
栈的基本运算有六种:
(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);
}
}