四,顺序栈和顺序队列
(1)顺序栈的应用(十进制数转换为二进制数)
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define max 100
#define N 2
typedef struct
{
ElemType data[max];
int top;
}sqstack;
sqstack *s;
void initstack(sqstack *&s)
{
s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;
}
bool push(sqstack *&s,ElemType e)
{
if(s->top==max-1)
return false;
s->top++;
s->data[s->top]=e;
return true;
}
bool pop(sqstack *&s,ElemType &e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
s->top--;
printf("%d",e);
return true;
}
void dub(int x)
{
int m,n,y;
while(x>0)
{
m=x%N;
x=x/N;
push(s,m);
}
while(s->top!=-1)
{
pop(s,n);
}
}
int main()
{
int x;
initstack(s);
printf("请输入一个十进制数\n");
scanf("%d",&x);
dub(x);
printf("\n");
system("pause");
return 0;
}

(2)顺序队列的应用

#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define max 100
typedef struct
{
ElemType data[max];
int front,rear;
}squeue;
squeue *q;
void initqueue(squeue *&q)
{
q=(squeue *)malloc(sizeof(squeue));
q->front=q->rear=-1;
}
bool queueempty(squeue *q)
{
return(q->front==q->rear);
}
bool enqueue(squeue *&q,ElemType e)
{
if(q->rear==max-1)
return false;
q->rear++;
q->data[q->rear]=e;
return true;
}
bool dequeue(squeue *&q,ElemType &e)
{
if(q->front==q->rear)
return false;
q->front++;
e=q->data[q->front];
return true;
}
void paidui(int x)
{
int i,n;
printf("原始数据为:\n");
for(i=1;i<=x;i++)
{
enqueue(q,i);
dequeue(q,n);
printf("%d ",n);
}
printf("\n出队顺序:\n");
for(i=1;i<=x;i++)
{
enqueue(q,i);
}
while(queueempty(q)!=true)
{
dequeue(q,n);
printf("%d ",n);
if(queueempty(q)!=true)
{
dequeue(q,n);
enqueue(q,n);
}
}
}
int main()
{
initqueue(q);
int x;
printf("请输入数字:\n");
scanf("%d",&x);
paidui(x);
printf("\n");
system("pause");
return 0;
}

五,实现链栈的基本运算的算法
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct linknode
{
ElemType data;
struct linknode *next;
}LinkStNode;
void initlist(LinkStNode *&s)
{
s = (LinkStNode *)malloc(sizeof(LinkStNode));
s->next = NULL;
}
void destorylist(LinkStNode *&s)
{
LinkStNode *pre = s, *p = s->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
bool stackempty(LinkStNode *s)
{
return(s->next == NULL);
}
void push(LinkStNode *&s, ElemType m)
{
LinkStNode *p;
p = (LinkStNode *)malloc(sizeof(LinkStNode));
p->data = m;
p->next = s->next;
s->next = p;
printf("%d\n",s->next->data );
}
bool pop(LinkStNode *&s, ElemType &m)
{
LinkStNode *p;
if (s->next == NULL)
{
return false;
}
p = s->next;
m = p->data;
s->next = p->next;
free(p);
return true;
}
bool gettop(LinkStNode *s, ElemType &m)
{
if (s->next == NULL)
{
return false;
}
m = s->next->data;
return true;
}
int main()
{
LinkStNode *p;
ElemType n;
initlist(p);
printf("入栈后为:\n");
push(p, 10);
push(p, 20);
push(p, 30);
push(p, 40);
push(p, 50);
printf("\n出栈后为:\n");
pop(p, n);
printf("%d\n", n);
pop(p, n);
printf("%d\n", n);
pop(p, n);
printf("%d\n", n);
pop(p, n);
printf("%d\n", n);
pop(p, n);
printf("%d\n", n);
system("pause");
return 0;
}

六,实现链队的基本运算的算法
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct qnode
{
ElemType data;
struct qnode *next;
}DataNode;
typedef struct queue
{
DataNode *front;
DataNode *rear;
}Linkqueue;
void initqueue(Linkqueue *&s)
{
s = (Linkqueue *)malloc(sizeof(Linkqueue));
s->front = s->rear = NULL;
}
void Destoryqueue(Linkqueue *&s)
{
DataNode *pre = s->front, *p;
if (pre != NULL)
{
p = pre->next;
while (p != NULL)
{
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
free(s);
}
bool Queueempty(Linkqueue *&s)
{
return(s->rear == s->front);
}
void enqueue(Linkqueue *&s, ElemType e)
{
DataNode *p;
p = (DataNode *)malloc(sizeof(DataNode));
p->data = e;
p->next = NULL;
if (s->rear == NULL)
{
s->front = s->rear = p;
}
else
{
s->rear->next = p;
s->rear = p;
}
}
bool dequeue(Linkqueue *&s, ElemType &e)
{
DataNode *t;
if (s->rear == NULL)
return false;
t = s->front;
if (s->front == s->rear)
s->front = s->rear = NULL;
else
s->front = s->front->next;
e = t->data;
free(t);
return true;
}
int main()
{
Linkqueue *s;
ElemType n;
initqueue(s);
enqueue(s, 10);
enqueue(s, 20);
enqueue(s, 30);
enqueue(s, 40);
enqueue(s, 50);
printf("出队列为:\n");
dequeue(s, n);
printf("%d\n", n);
dequeue(s, n);
printf("%d\n", n);
dequeue(s, n);
printf("%d\n", n);
dequeue(s, n);
printf("%d\n", n);
dequeue(s, n);
printf("%d\n", n);
system("pause");
return 0;
}

七,实现环形队列的基本运算的算法
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define max 6
typedef struct queue
{
ElemType data[max];
int front;
int rear;
}Squeue;
void initqueue(Squeue *&s)
{
s = (Squeue *)malloc(sizeof(Squeue));
s->front = s->rear = 0;
}
void Destoryqueue(Squeue *&s)
{
free(s);
}
bool queueempty(Squeue *s)
{
return(s->front == s->rear);
}
bool enqueue(Squeue *s, ElemType m)
{
if ((s->rear + 1) % max == s->front)
return false;
s->rear = (s->rear + 1) % max;
s->data[s->rear] = m;
printf("%d\n", s->data[s->rear]);
return true;
}
bool dequeue(Squeue *&s, ElemType &m)
{
if (s->front == s->rear)
return false;
else
{
s->front = (s->front + 1) % max;
m = s->data[s->front];
return true;
}
}
int main()
{
Squeue *p;
ElemType n;
initqueue(p);
enqueue(p, 10);
enqueue(p, 20);
enqueue(p, 30);
enqueue(p, 40);
enqueue(p, 50);
printf("出队列为:\n");
dequeue(p, n);
printf("%d\n", n);
dequeue(p, n);
printf("%d\n", n);
dequeue(p, n);
printf("%d\n", n);
dequeue(p, n);
printf("%d\n", n);
dequeue(p, n);
printf("%d\n", n);
system("pause");
return 0;
}
