![在这里插入图片描述](https://img-blog.csdnimg.cn/c6a8eba17bfc4e6eba03f7c875a2d688.jpeg)
typedef void SeqStack;
struct SeqStackT {
int length;
int capacity;
unsigned int* node;
};
SeqStack* createStack(int capacity) {
SeqStackT* stack = new SeqStackT;
if (stack == NULL) {
return NULL;
}
stack->node = new unsigned int[capacity];
if (stack->node == NULL) {
return NULL;
}
stack->capacity = capacity;
stack->length = 0;
return stack;
}
void destoryStack(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
//cout << "list addr: " << list << " seqlist addr: " << seqlist << endl;
if (stackT->node != NULL) {
cout << "before list addr: " << stackT << " seqlist addr: " << stack << endl;
delete stackT->node;
stackT->node = NULL;
stackT->capacity = 0;
stackT->length = 0;
delete stackT;
//delete seqlist;
stackT = NULL;
stack = NULL;
cout << "after list addr: " << stackT << " seqlist addr: " << stack << endl;
}
}
void clearStack(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT != NULL) {
stackT->length = 0;
}
}
int getSize(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT != NULL) {
return stackT->length;
}
else {
return -1;
}
}
int pushData(SeqStack* stack, void* item) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT == NULL || item == NULL||stackT->length>=stackT->capacity) {
return -1;
}
stackT->node[stackT->length] = *(int*)item;
//cout << "item : " <<*(int*)item << endl;
stackT->length++;
return 0;
}
void* popData(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT==NULL|| stackT->length == 0) {
return NULL;
}
int data = stackT->node[stackT->length - 1];
stackT->length--;
return &data;
}
void* topData(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT==NULL || stackT->length == 0) {
return NULL;
}
int data = stackT->node[stackT->length - 1];
return &data;
}
int getCapacity(SeqStack* stack) {
SeqStackT* stackT = NULL;
stackT = (SeqStackT*)stack;
if (stackT == NULL) {
return -1;
}
return stackT->capacity;
}
int main() {
SeqStack* stack = createStack(10);
int a1 = 1, a2 = 2, a3 = 3, a4 = 4, a5 = 5;
pushData(stack, (int*)&a1);
pushData(stack, (int*)&a2);
pushData(stack, (int*)&a3);
pushData(stack, (int*)&a4);
pushData(stack, (int*)&a5);
cout << "capacity: " << getCapacity(stack) << " length: " << getSize(stack) << " topdata: "<<*(int*)topData(stack)<<endl;
while (getSize(stack) > 0) {
int data = *(int*)popData(stack);
cout << "pop data: " << data << endl;
}
pushData(stack, (int*)&a1);
pushData(stack, (int*)&a2);
cout << "capacity: " << getCapacity(stack) << " length: " << getSize(stack) << " topdata: " << *(int*)topData(stack) << endl;
destoryStack(stack);
stack == NULL;
cout << "destory capacity: " << getCapacity(stack) << " length: " << getSize(stack) << endl;
system("pause");
return 0;
}