栈2: 栈的链式存储
栈的结点
| |
| typedef struct LINKNODE{ |
| struct LINKNODE *next; |
| } LinkNode; |
链式栈的结构
| |
| typedef struct LINKSTACK{ |
| LinkNode head; |
| int size; |
| } LinkStack; |
栈的初始化
| LinkStack* Init_LinkStack(){ |
| LinkStack *stack = (LinkStack*)malloc(sizeof(LinkStack)); |
| stack->head.next = NULL; |
| stack->size=0; |
| |
| return stack; |
| }; |
入栈(头插法)
| |
| void Push_LinkStack(LinkStack* stack, LinkNode *data){ |
| if(stack==NULL) return; |
| if(data==NULL) return; |
| data->next = stack->head.next; |
| stack->head.next = data; |
| stack->size++; |
| }; |
返回栈顶元素
| LinkNode* Top_LinkStack(LinkStack* stack){ |
| if(stack==NULL) return NULL; |
| if(stack->size==0) return NULL; |
| return stack->head.next; |
| }; |
出栈(删除第一个元素)
| void Pop_LinkStack(LinkStack* stack){ |
| if(stack==NULL) return; |
| if(stack->size==0) return; |
| LinkNode *curNode = stack->head.next; |
| |
| stack->head.next = stack->head.next->next; |
| curNode->next = NULL; |
| free(curNode); |
| |
| stack->size--; |
| }; |
返回栈元素个数
| int Size_LinkStack(LinkStack* stack){ |
| if(stack==NULL) return -1; |
| return stack->size; |
| }; |
清空
| void Clear_LinkStack(LinkStack* stack){ |
| if(stack==NULL) return; |
| stack->head.next = NULL; |
| stack->size = 0; |
| }; |
销毁
| void FreeSpace_LinkStack(LinkStack* stack){ |
| if(stack==NULL) return; |
| free(stack); |
| }; |
测试
自定义栈结构
| typedef struct PERSON{ |
| LinkNode node; |
| char name[64]; |
| int age; |
| } Person; |
测试
| int main(){ |
| |
| LinkStack *stack = Init_LinkStack(); |
| |
| Person p1,p2,p3; |
| |
| strcpy(p1.name, "aaa"); |
| strcpy(p2.name, "bbb"); |
| strcpy(p3.name, "ccc"); |
| p1.age = 10; |
| p2.age = 20; |
| p3.age = 30; |
| |
| Push_LinkStack(stack, (LinkNode*)&p1); |
| Push_LinkStack(stack, (LinkNode*)&p2); |
| Push_LinkStack(stack, (LinkNode*)&p3); |
| |
| while(Size_LinkStack(stack)>0){ |
| |
| Person *p = (Person*)Top_LinkStack(stack); |
| cout << p->name << " " << p->age << endl; |
| |
| Pop_LinkStack(stack); |
| } |
| |
| FreeSpace_LinkStack(stack); |
| |
| |
| system("pause"); |
| return 0; |
| } |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!