栈的链表实现
来源:互联网 发布:动易cms后台登录密码 编辑:程序博客网 时间:2024/05/01 07:44
栈的原理是后进先出,看懂未必能真正理解,理解了未必能写出来,写出来的未必能运行,所以动手写写还是有必要的。
写完修改了好一会才运行起来。
一是 结构体的2种定义方式搞不清了。
二是 指针的使用
三是 malloc一个结构体,和 java 搞混了 ,居然写成new
struct StackNode{
int data;
struct StackNode *link;
};
struct LinkStack{
struct StackNode* top;
int size;
};
void initStack(struct LinkStack *s){
if(s == NULL){
return;
}
s->top = NULL;
s->size = 0;
}
int stackEmpty(struct LinkStack *s){
if(s->size == 0){
return 0;
}
return -1;
}
int getTop(struct LinkStack *s){
if(s != NULL && s->size > 0){
return s->top->data;
}
}
int push(struct LinkStack *s,int data){
if(s == NULL){
return -1;
}
struct StackNode* newNode = (struct StackNode*)malloc(sizeof(struct StackNode));
if(newNode == NULL){
return -1;
}
newNode->data = data;
newNode->link = s->top;
s->top = newNode;
s->size ++;
return 0;
}
int pop(struct LinkStack *s,int *val){
if(s == NULL){
return -1;
}
if(s->size == 0){
return -1;
}
struct StackNode* topNode = s->top;
if(topNode != NULL){
s->top = topNode->link;
s->size --;
*val = topNode->data;
free(topNode);
topNode == NULL;
}
return 0;
}
int main(){
struct LinkStack s;
printf("initStack1 \n");
initStack(&s);
printf("initStack2 \n");
push(&s,50);
push(&s,60);
push(&s,70);
// 打印log
struct StackNode* topNode = s.top;
while(topNode != NULL){
printf("push val:%d \n",topNode->data);
topNode = topNode->link;
}
//end
int val ;
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
push(&s,80);
push(&s,90);
push(&s,100);
// 打印log
topNode = s.top;
while(topNode != NULL){
printf("push val:%d \n",topNode->data);
topNode = topNode->link;
}
//end
return 0;
}
- 栈模型的实现--链表实现
- 链表实现的栈
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈 链表的实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈-链表的实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 各种实现队列的问题:链表实现,栈实现队列及队列实现栈
- 栈的顺序表实现和链表实现
- 1075 Thread in a space
- 二叉树------序列化与反序列化二叉树
- toj 4615 Tetrahedrons and Spheres
- 图片压缩问题
- EventBus源码阅读(3)-Subscribe
- 栈的链表实现
- 宏和内联函数的小结
- Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental解决办法
- [Unity基础]移动平台下的文件读写
- Ext JS 6 下载与设置
- JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld
- apache 配置与使用
- bootstrap模态框垂直居中效果
- 设计模式之代理模式(Proxy)