做音乐的网站设计,镇江百度优化,广东省公路建设公司官方网站,企业管理系统网站开发标书栈的链式存储
栈的链式存储是通过链表来实现的#xff0c;每个节点包含一个元素和一个指向下一个节点的指针。链式存储的栈不需要提前分配内存空间#xff0c;可以动态地增加或减少元素。
在链式存储中#xff0c;栈顶元素通常是链表的头节点#xff0c;栈底元素是链表的…栈的链式存储
栈的链式存储是通过链表来实现的每个节点包含一个元素和一个指向下一个节点的指针。链式存储的栈不需要提前分配内存空间可以动态地增加或减少元素。
在链式存储中栈顶元素通常是链表的头节点栈底元素是链表的末尾节点。通过链表的插入和删除操作可以轻松实现栈的基本操作
入栈操作push创建一个新节点将新元素放入节点中然后将新节点插入链表的头部成为新的栈顶节点。出栈操作pop将链表头部的节点取出并将头指针指向下一个节点成为新的栈顶节点。栈空判断当链表为空时表示栈为空。栈满判断链式存储的栈一般不会满除非内存耗尽。
链式存储的栈操作灵活但由于每个节点需要额外的指针空间可能会占用更多的内存。另外由于链式存储的特性访问栈中特定位置的元素可能需要遍历整个链表导致性能略低于顺序存储。
线性表的链式存储受到限制的线性表
栈的链式存储项目结构 链式存储的头文件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);
#endifc语言文件代码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.htypedef 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;}项目运行结果展示