栈和队列 (2)

  • 格式:doc
  • 大小:51.00 KB
  • 文档页数:6

顺序栈的实现ch32_s stack.c
#include "stdio.h"
#define StackSize 100
typedef int ElemType;
typedef struct {
ElemType elem[StackSize];
int top;
}SqStack;
InitStack(SqStack *pS)
{
pS->top=0;
}
int Push(SqStack *pS,ElemType e) {
if (pS->top==StackSize-1) return 0;
pS->elem[pS->top]=e;
pS->top=pS->top+1;
return 1;
}
int Pop(SqStack *pS,ElemType* pe) {
if (pS->top==0)
return 0;
pS->top = pS->top - 1;
*pe = pS->elem[pS->top];
return 1;
}
main()
{
SqStack S;
ElemType e;
int N;
InitStack(&S);
N=1348;
while(N){
Push(&S,e);
N = N/8;
}
while(Pop(&S,&e)){
printf("%d",e);
}
getch();
}
链栈的实现ch3_lstack.c #include "stdio.h"
typedef int ElemType;
typedef struct Node{
ElemType elem;
struct Node *next;
}SNode;
InitStack(SNode* pS)
{
pS->next=NULL;
}
Push(SNode* pS,ElemType e)
{
SNode* node;
node = (SNode*)malloc(sizeof(SNode));
node->elem = e;
node->next = pS->next;
pS->next = node;
}
int Pop(SNode* pS,ElemType* pe)
{
SNode* node;
if (pS->next==NULL){
}
*pe = pS->next->elem;
node=pS->next;
pS->next=node->next;
free(node);
return 1;
}
main()
{
SNode S;
ElemType e;
int N;
InitStack(&S);
N=1348;
while(N){
e = N % 8;
Push(&S,e);
N = N/8;
}
while(Pop(&S,&e)){
printf("%d",e);
}
getch();
}
队列的顺序实现(循环队列)ch3_squeue.c
#define MaxSize 100
typedef int ElemType;
typedef struct {
ElemType elem[MaxSize];
int front,rear;
}SqQueue;
InitQueue(SqQueue* pQ)
pQ->front=pQ->rear=0;
}
int EnQueue(SqQueue* pQ,ElemType e)
{
if ((pQ->rear+1)%MaxSize == pQ->front)
return 0;
pQ->elem[pQ->rear] = e;
pQ->rear = (pQ->rear+1)%MaxSize;
return 1;
}
int DeQueue(SqQueue* pQ,ElemType* pe)
{
if (pQ->rear == pQ->front)
return 0;
*pe = pQ->elem[pQ->front];
pQ->front = (pQ->front+1)%MaxSize;
return 1;
}
main()
{
SqQueue Q;
ElemType e;
InitQueue(&Q);
e=2;
EnQueue(&Q,e);
e=5;
EnQueue(&Q,e);
e=3;
EnQueue(&Q,e);
while(DeQueue(&Q,&e)){
printf("\n%d",e);
}
getch();
}
队列的链式实现ch3_lqueue.c
#include "stdio.h"
#define MaxSize 100
typedef int ElemType;
typedef struct QNode{
ElemType elem;
struct QNode * next;
}QNode;
typedef struct {
QNode* front;
QNode* rear;
}LinkQueue;
InitQueue(LinkQueue* pQ)
{
QNode* node;
node=(QNode*)malloc(sizeof(QNode)); node->next = NULL;
pQ->front=pQ->rear=node;
}
int EnQueue(LinkQueue* pQ,ElemType e)
{
QNode* node;
node=(QNode*)malloc(sizeof(QNode));
node->elem = e;
node->next = NULL;
pQ->rear->next = node;
pQ->rear = node;
return 1;
}
int DeQueue(LinkQueue* pQ,ElemType* pe) {
QNode* node;
if (pQ->rear == pQ->front)
return 0;
node = pQ->front->next;
*pe = node->elem;
pQ->front->next = node->next;
if (pQ->rear==node)
pQ->rear=pQ->front;
free(node);
return 1;
}
DestoryQueue(LinkQueue* pQ) {
while(pQ->front){
pQ->rear=pQ->front->next; free(pQ->front);
pQ->front = pQ->rear;
}
}
main()
{
LinkQueue Q;
ElemType e;
InitQueue(&Q);
e=2;
EnQueue(&Q,e);
e=5;
EnQueue(&Q,e);
e=3;
EnQueue(&Q,e);
while(DeQueue(&Q,&e)){
printf("\n%d",e);
}
DestoryQueue(&Q);
getch();
}。