关于C++中建立一个栈的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 00:54:52
#ifndef stack
#define stack
struct stack{
struct link{
void* data;
link* next;
void initialize(void* data,link* next)
}* head;
void initialize();
void push(void* data);
void* peek();
void* pop();
void cleanup();

}
#endif

#include <stdlib.h>
#include <assert.h>
#include "nested.h"
void stack::link::initialize(void* Data,link* Next)
{
data=Data;
next=Next;
};
void stack::initialize()
{
head=0;
};
void stack::push(void*data)
{
link*newlink=(link*)malloc(sizof(link));
assert(newlink);
newlink->initialize(Data,head);
head=newlink;
};
void* stack::peek()
{
return head->data;

};
void* stack::pop()
{
if(head==0) return 0;
void*result=head->data;
link*oldHead=head;
head=head->next;
free(oldHead);
retu

1: stack myStack;
2: myStack.initialize();
3: char *p1 = "abckefg";
4: char *p2 = "123456";
5: myStack.push((void*)p1);
6: myStack.push((void*)p2);

第1行定义myStack,
第2行后myStack.head = 0;这应该没问题
第5行开始注意看了, 把变量替换了,让你看明白点
void stack::push(p1)
{
link*newlink=(link*)malloc(sizof(link));
newlink->initialize(p1, 0); //这时myStack.head = 0
head=newlink;
};
相当于
void stack::push(p1)
{
link*newlink=(link*)malloc(sizof(link));
newlink->data = p1;
newlink->next = 0;
head=newlink;
};
这时
myStack.head->data = "abckefg";
myStack.head->next = 0;

第6行时又不一样了
void stack::push(p2)
{
link*newlink=(link*)malloc(sizof(link));
newlink->initialize(p2, myStack.head); //这时myStack.head != 0了
head=newlink;
};
相当于
void stack::push(p2)
{
link*newlink=(link*)malloc(sizof(li