赞
踩
栈的链式存储
栈的链式存储是通过链表来实现的,每个节点包含一个元素和一个指向下一个节点的指针。链式存储的栈不需要提前分配内存空间,可以动态地增加或减少元素。
在链式存储中,栈顶元素通常是链表的头节点,栈底元素是链表的末尾节点。通过链表的插入和删除操作,可以轻松实现栈的基本操作:
链式存储的栈操作灵活,但由于每个节点需要额外的指针空间,可能会占用更多的内存。另外,由于链式存储的特性,访问栈中特定位置的元素可能需要遍历整个链表,导致性能略低于顺序存储。
线性表的链式存储:受到限制的线性表
栈的链式存储项目结构
链式存储的头文件LinkedStorage.h
头文件LinkedStorage.h代码
#ifndef LINKSTACK_H #define LINKSTACK_H #include <stdio.h> #include <stdlib.h> // 链式栈的节点 typedef struct LINKNODE { struct LINKNODE* next; }LinkNode; // 链式栈 typedef struct LINKSTACK { LinkNode head; int size; }LinkStack; // 初始化函数 LinkStack* Init_LinkStack(); // 入栈 void Push_LinkStack(LinkStack* stack, LinkNode* data); // 出栈 void Pop_LinkStack(LinkStack* stack); // 返回栈顶元素 LinkNode* TopLinkStack(LinkStack* stack); // 返回栈元素的个数 int Size_LinkStack(LinkStack* stack); // 清空栈 void Clear_LinkStack(LinkStack* stack); // 销毁栈 void FreeSpace_LinkStack(LinkStack* stack); #endif
c语言文件代码LinkedStorage.cpp
cpp代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include "LinkedStorage.h" // 初始化函数 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++; }; // 出栈 void Pop_LinkStack(LinkStack* stack) { if (stack == NULL) { return; } if (stack->size == 0) { return; } // 第一个有效节点 LinkNode* pNext = stack->head.next; stack->head.next = pNext->next; stack->size--; }; // 返回栈顶元素 LinkNode* TopLinkStack(LinkStack* stack) { if (stack == NULL) { return NULL; } if (stack->size == 0) { return NULL; } // 返回栈顶元素 return stack->head.next; }; // 返回栈元素的个数 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); };
项目主文件代码
main主文件代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include "LinkedStorage.h" typedef struct PERSON { LinkNode node; char name[64]; int age; }Person; int main(void) { // 创建栈 LinkStack* stack = Init_LinkStack(); // 创建数据 Person p1, p2, p3, p4, p5; // 将数据传递进入数组 strcpy(p1.name, "fff"); strcpy(p2.name, "qqq"); strcpy(p3.name, "hhh"); strcpy(p4.name, "ooo"); strcpy(p4.name, "yyy"); // 创建年龄类型的数据 p1.age = 22; p2.age = 23; p3.age = 24; p4.age = 25; p5.age = 26; //入栈 Push_LinkStack(stack, (LinkNode*)&p1); Push_LinkStack(stack, (LinkNode*)&p2); Push_LinkStack(stack, (LinkNode*)&p3); Push_LinkStack(stack, (LinkNode*)&p4); Push_LinkStack(stack, (LinkNode*)&p5); // 输出 while (Size_LinkStack(stack) > 0) { // 取出栈顶元素 Person* p = (Person*)TopLinkStack(stack); printf("Name = %s Age = %d\n", p->name, p->age); // 弹出栈顶元素 Pop_LinkStack(stack); } // 销毁栈 FreeSpace_LinkStack(stack); system("pause"); return 0; }
项目运行结果展示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。