C语言怎么用指针实现栈

Cokemark Cokemark 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

/*
* stack.c
*
* Created on: 2011-12-2
* Author: root
*/
#include<stdio.h>
#include<stdlib.h>
#define N 5
//push pop top empty full clear size
typedef int T;
typedef struct {
T *base;
T *top;
int n;
} Stack;

void p_stackinit(Stack* p) {
p->base = malloc(sizeof(T)*N);
p->top=p->base;
}

int p_stackfull(Stack *p) {
return p->n==N-1;
}

int p_stackempty(Stack *p) {
return p->n==0;
}

void p_stackpush(Stack* p, T d) {
if(p_stackfull(p)){
printf("stack is full!\n");
return;
}
printf("d=%d\n",d);
*p->top++=d;
++p->n;
printf("%d\t\n",*p->top);
}

void p_stackpop(Stack* p) {
if(p_stackempty(p)){
printf("stack is empty~!\n");
return;
}
T *q=p->top;
free(p->top);
p->top=--q;
--p->n;
}

T p_stacktop(Stack* p) {
if(p_stackempty(p)){
printf("stack is empty~!\n");
return -1;
}
return *(p->top);
}

void p_stackclear(Stack *p) {
T *q=p->top;
while(p->n!=0){
free(p->top);
p->top=--q;
--p->n;
}
}

T p_stacksize(Stack *p) {
return p->n;
}

int main() {
Stack s1;
p_stackinit(&s1);
printf("test1\n");
int i;
for (i = 0; i < N; ++i) {
p_stackpush(&s1, i * 5);
printf("test2\n");
}
printf("size=%d\n", p_stacksize(&s1));
printf("size=%d\n", p_stacksize(&s1));
while (!p_stackempty(&s1)) {
T t = p_stacktop(&s1);
printf("%d ", t);
p_stackpop(&s1);
}
printf("\n");
p_stackpop(&s1);

return 0;
}

不知道错哪儿了,求大家指教(或者给一个参考的例子也行),谢谢了!
...全文

相关推荐

程序设计基于指针的链式数据结构实现:C语言动态内存管理与链式栈应用解析

内容概要:本文围绕C语言中的指针与数据结构展开,重点讲解了指针在系统级编程、嵌入式开发和高性能计算中的关键作用,并通过fun1和fun2两个示例函数介绍了基本的函数实现与参数传递。文章深入分析了链表、链式栈等动态数据结构的实现原理,强调指针在构建结点连接、动态内存管理中的核心地位。结合malloc、calloc、realloc和free等内存管理函数,阐述了动态存储分配机制及其在链表和栈中的应用。此外,文档通过多项试题全面检验对指针与数据结构的理解,涵盖单链表特性、链式栈操作、内存释放函数等知识点,强化理论与实践结合。; 适合人群:具备C语言基础,正在学习数据结构与指针操作的大专院校学生或初级开发人员,以及从事嵌入式、系统级开发的技术人员。; 使用场景及目标:①理解“程序=数据结构+算法”的核心思想;②掌握指针在链表、栈等动态结构中的应用;③熟练使用动态内存管理函数并避免内存泄漏;④通过试题巩固对链式结构操作的理解与编程能力; 阅读建议:学习过程中应结合代码示例与试题实践,重点关注指针操作的安全性与内存管理的规范性,建议动手实现链式栈的入栈、出栈等功能以加深理解。

Bol5261

栈(C语言实现).pdf

栈(C语言实现).pdf

资料大全

C语言实现链式栈的模板

在C语言里面没有模板一说,这里通过用一些极为巧妙的方法来实现了类似于C++的模板功能,使得链式栈的数据可以通过实际需要的类型来决定

qeesung

数据结构C语言实现栈和队列的基本操作

用C语言实现了栈和队列的数据结构形式,其中包括栈和队列的初始化,压栈弹栈,进队出堆。和一些其他的基本操作!

fine_zzz

C语言栈和队列代码实现

包含内容:栈、队列、循环队列的数组实现方式和链表实现方式

葡萄皮Apple
评论 4
收藏 已收藏
分享
返回顶部
Cokemark
C语言 70,039 成员 243,237 内容