程序设计范式三
实现栈结构的先入后出
#include<iostream>
#include<stdlib.h>
#include <cstring>
struct stack{
void *element;
int size;
int volume;
int len;
};
/*新建s栈*/
void news(stack *s,int num){
s->size=0;
s->volume=3;
s->len=num;
s->element=malloc(s->volume*s->len);
}
void push(stack *s,void *value){
if(s->size==s->volume){
s->volume*=2;
s->element=realloc(s->element,s->volume*s->len);
}
void *addr=(char*)s->element+s->size*s->len;
memcpy(addr,value,s->len);
s->size++;
}
void pop(stack *s,void *value){
void *addr=(char*)s->element+(s->size-1)*s->len;
memcpy(value,addr,s->len);
s->size--;
}
int main(){
int cards[5]={3,7,1,2,4};
stack st;
news(&st,sizeof(int));
for(int i=0;i<5;i++)
push(&st,&cards[i]);
for(int i=0;i<5;i++)
pop(&st,&cards[i]);
for(int i=0;i<5;i++)
printf("%d\n",cards[i]);
char *books[4]={"西游","三国","水浒","红楼"};
stack st1;
news(&st1,sizeof(char*));
for(int i=0;i<4;i++){
char *book=strdup(books[i]);
push(&st1,&book);
}
char *name;
for(int i=0;i<4;i++){
pop(&st1,&name);
printf("%s ",name);
}
}
根据栈结构实现一个通用的顺序队列,与栈实现方式类似,队列先进先出
#include<iostream>
#include<stdlib.h>
#include <cstring>
struct queue{
void *element;
int volume;
int len; //元素所占字节数
int front;
int rear;
};
void news(queue *q,int num){
q->len=num;
q->volume=3;
q->front=0;
q->rear=0;
q->element=malloc(q->volume*q->len);
}
void push(queue *q,void *value){
if((q->rear + 1) % q->volume == q->front){
q->volume*=2;
q->element=realloc(q->element,q->volume*q->len);
}
void *addr=(char*)q->element+q->rear*q->len;
memcpy(addr,value,q->len);
q->rear=(q->rear+1)%q->volume;
}
void pop(queue *q,void *value){
if(q->rear== q->front){
return;
}
void *addr=(char*)q->element+(q->len)*q->front;
memcpy(value,addr,q->len);
q->front=(q->front+1)%q->volume;
}
int main(){
int cards[5]={3,7,1,2,4};
queue q1;
news(&q1,sizeof(int));
for(int i=0;i<5;i++)
push(&q1,&cards[i]);
int temp;
for(int i=0;i<5;i++){
pop(&q1,&temp);
printf("%d\n",temp);
}
char *books[4]={"西游","三国","水浒","红楼"};
queue q2;
news(&q2,sizeof(char*));
for(int i=0;i<4;i++){
char *book=strdup(books[i]);
push(&q2,&book);
}
char *name;
for(int i=0;i<4;i++){
pop(&q2,&name);
printf("%s ",name);
}
}