第三章:栈和队列

来源:互联网 发布:java批量添加数据 编辑:程序博客网 时间:2024/06/08 14:31

 

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

 

栈的基本运算有六种:

 

(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);
}

 

 

}