#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
typedef struct{
void *element;//元素
int size;//个数
int volume;///栈容量
int len;//元素字节数
}stack;
void create(stack *s,int num);//创建
void dispose(stack *s);//撤销
void push(stack *s,void *value);//入栈
void pop(stack *s,void *value);//出栈
int main(){
int cards[5]={3,7,1,2,4};
stack st1;
create(&st1,sizeof(int));
for(int i=0;i<5;++i) push(&st1,&cards[i]);
cout<<"栈容量"<<st1.volume<<" 个数"<<st1.size<<" 元素大小"<<st1.len<<endl;
for(int i=0;i<5;++i) pop(&st1,&cards[i]);
printf("stack:\n");
for(int i=0;i<5;++i) printf("%d\n",cards[i]);
cout<<"-----------"<<endl;
char *books[10]={"三国演义","西游记","水浒传","红楼梦"};
stack st2;
create(&st2,sizeof(char*));//
for(int i=0;i<4;i++){
char *book=strdup(books[i]);//strdup函数是c语言中常用的一种字符串拷贝库函数,一般和free函数成对出现。
push(&st2,&book);
}
cout<<"栈容量"<<st2.volume<<" 个数"<<st2.size<<" 元素大小"<<st2.len<<endl;
//printf("%s\n",(char*)st2.element+10);
char *name=new char[10];
printf("stack:\n");
for(int i=0;i<4;i++){//cout<<i<<endl;
pop(&st2,&name);
printf("%s\n",name);
}
cout<<"-----------"<<endl;
dispose(&st1);
dispose(&st2);
cout<<"-----------"<<endl;
return 0;
}
//创建
void create(stack *s,int num){
s->size=0;
s->volume=2;
s->len=num;
s->element=malloc(s->volume * s->len);//1-4-8
}
//删除
void dispose(stack *s){
free(s->element);
}
//入栈
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){
//assert(s->size);
void *addr=(char*)s->element+(s->size-1)*s->len;//指针计算
memcpy(value,addr,s->len);//
s->size--;//return s->element[s->size];
}
通用栈范式
最新推荐文章于 2024-07-24 22:13:06 发布