网址查询地址查询站长之家wordpress信息搜索插件
网址查询地址查询站长之家,wordpress信息搜索插件,app下载登录,网站的营销推广一、原理
栈通常从数据结构和内存空间两个角度解释#xff0c;从数据结构的角度#xff0c;栈是一种线性结构表#xff0c;只允许在固定的一端进行插入和删除元素#xff0c;从内存空间角度#xff0c;操作系统为函数和变量分配的内存空间通常在栈区#xff0c;但是无论…一、原理
栈通常从数据结构和内存空间两个角度解释从数据结构的角度栈是一种线性结构表只允许在固定的一端进行插入和删除元素从内存空间角度操作系统为函数和变量分配的内存空间通常在栈区但是无论是从数据结构还是内存空间角度来看栈都遵从的原则是后进先出原则。
栈的特性是顺序存储随机访问和后进先出LIFOLast In First Out
压栈栈的插入操作叫做进栈、压栈、入栈入数据在栈顶出栈栈的删除操作叫做出栈出数据也在栈顶 栈的缺陷
栈空间有容量限制实现动态扩容的栈在每次插入时都需要检查是否需要扩容降低了效率。栈空间的扩容策略可能会导致内存空间浪费。数据只能从栈顶进行增删不支持随机增删。 二、Stack.h
#define _CRT_SECURE_NO_WARNINGS 1#include stdio.h
#include stdlib.h#define CAPACITY 4 // 初始容量为4typedef int DataType;typedef struct Stack
{DataType* data;int size;int capacity;
}Stack;void Init(Stack* s)
{s-data (DataType*)malloc(sizeof(DataType) * CAPACITY);s-size 0;s-capacity CAPACITY;
}void CheckCapacity(Stack* s)
{if (s-size s-capacity){// 栈已满需要扩容s-data (DataType*)realloc(s-data, sizeof(DataType) * (s-size 4));s-capacity 4;}
}int Empty(Stack* s)
{return s-size 0;
}void Push(Stack* s, DataType x)
{CheckCapacity(s);s-data[s-size] x;s-size;
}void Pop(Stack* s)
{if (Empty(s)){printf(栈为空pop失败\n);return;}--s-size;
}DataType Head(Stack* s)
{if (Empty(s)){printf(栈为空无栈顶元素\n);return NULL;}return s-data[s-size - 1];
}void Destroy(Stack* s)
{free(s-data);s-data NULL;printf(栈已销毁\n);
}void Print(Stack* s)
{if (Empty(s)){printf(栈为空\n);return;}int i 0;for (; i s-size; i){printf(%2d , s-data[i]);}printf(栈顶元素为%2d\n, Head(s));
} 三、test.c
#define _CRT_SECURE_NO_WARNINGS 1#include Stack.hint main()
{Stack s;Init(s);Push(s, 1);Push(s, 3);Push(s, 5);Push(s, 7);Push(s, 2);Push(s, 4);Push(s, 6);Push(s, 8);Print(s);Pop(s);Pop(s);Pop(s);Print(s);Push(s, 20);Print(s);Pop(s);Pop(s);Pop(s);Pop(s);Pop(s);Pop(s);Pop(s);Pop(s);Print(s);Destroy(s);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87510.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!