`
hjj20040849
  • 浏览: 113586 次
  • 来自: 广州
社区版块
存档分类
最新评论

栈的顺序存储结构(C语言版)

阅读更多

我在准备的过程中,发现很多笔试题和面试的时候,都是用C语言来描述的,而且现在我的一些没有Java基础的师弟正在开始学习数据结构,所以为了方便他们也方便自己还是下定决心用C语言进行数据结构的代码实现,毕竟所有的语言都是相通的,学起来并不难,更何况我大一的时候学过呢,所以在此向一些希望看到我的Java版本实现的朋友道个歉。

 

的定义:限定仅在表尾进行插入和删除操作的线性表,我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈成为空栈,栈又称为先进后出的线性表。

 

有些初学者看不懂什么叫做顺序存储结构和链式存储结构,下面就补充一下他的定义

顺序存储结构 的定义:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的

 

链式存储结构 的定义 :是把数据元素存放在任意的单元里,这组存储单元可以是连续的,也可以是不连续的

 

下面进行给出这个基本的代码实现,因为C语言是面向过程语言,所以我们就无法像之前线性表那样进行类的封装了,但是我们可以借鉴面向对象的思想,在下面的代码中,定义并且声明一个结构体,就相当于封装一个类,然后进行各种方法的封装,在main方法中我们就可以直接调用了。

/*
	这个是栈的线性存储结构 
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
#define ERROR 0
#define OK 1
#define MAXSIZE 20
#define  random(x) (rand()%x)

typedef int SElemType, Status;                              

typedef struct {	//定义一个结构体栈并且用字符串SqStack来代表该结构体类型 
	SElemType data[MAXSIZE] ;
	int top;
} SqStack;

//在栈中插入元素 e 
Status push(SqStack *s, SElemType e) {
	if(s->top == MAXSIZE - 1) {
		printf("栈已满");
		return ERROR; 
	}
	s->top++;
	s->data[s->top] = e;
	return OK;
} 

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR 
Status pop(SqStack *s, SElemType *e) {
	if(s->top == -1) {
		printf("栈为空");
		return ERROR;
	}
	*e = s->data[s->top];
	s->top--;
}

//栈元素展示 
void display(SqStack s) {
	int i =0;
	for(i; i <= s.top; i++) {
		printf("%d ", s.data[i]);
	}
	printf("\n");
}

int main() {
	srand((int)time(NULL));	//用当前的时间作为随机数种子,这样就能保证每次运行时都能取到不同的随机数序列

	SqStack s;
	s.top = -1;
	int i = 0;
	
	for(i; i < random(MAXSIZE); i++) {	//创建一个原始栈并为其赋值 
		s.data[i] = random(MAXSIZE);
		s.top++;	
	}
	printf("原始栈为  :");
	display(s);
	
	printf("插入后栈为:");
	push(&s, random(MAXSIZE));
	display(s);
	
	printf("弹出后栈为:"); 
	int e;
	pop(&s,&e); 
	display(s);
	printf("弹出元素为:%d\n", e); 
}

 同样,我的main方法中的数据都是通过产生随机数来产生的,只要多运行几次,同样可以完善的测试,当然如果大家觉得手动多次运行不方便对比,也可以进行for循环。下面是运行结果之一:

原始栈为  :5
插入后栈为:5 0
弹出后栈为:5
弹出元素为:0
请按任意键继续. . .

 

2
2
分享到:
评论
1 楼 chenchuangfeng 2013-02-28  
不错不错

相关推荐

    顺序栈的C语言实现(栈的顺序存储)

    栈的顺序存储即顺序栈是指,用一块连续的内存来存放一个栈,类似于数组,各元素在内存中是一个挨一个的。既然栈也是线性表,那么栈就可以通过线性表来实现,实现顺序栈只需在顺序表的插入删除操作时,只限定在一端...

    数据结构-栈的顺序存储

    数据结构-栈的顺序存储

    数据结构---栈和队列之顺序栈(C语言)

    数据结构----栈和队列之顺序栈(C语言),完整代码可运行

    数据结构-栈的实现代码(C语言版).rar

    数据结构 -- C语言版 -- 栈的部分实现代码(栈的实现、栈的应用),详细介绍参考数据结构--栈的系列博文。链接为:https://blog.csdn.net/songshuai0223/category_9742561.html。

    王道数据结构+C语言版+超全笔记(图文)+个人整理版本

    (二)栈和队列的顺序存储结构 (三)栈和队列的链式存储结构 (四)栈和队列的应用 (五)特殊矩阵的压缩存储 四、树与二叉树栈 (一)树的概念 (二)二叉树 1.二叉树的定义及其主要特征 2.二叉树的顺序存储结构和链式存储结构...

    《数据结构》--栈的顺序存储和链式存储

    前面上传了线性表的顺序存储和链式存储,是为了方便学习数据结构的(喜欢用c语言描述版本)的朋友,现在把栈的顺序存储和链式存储上传,希望为同学们提供一个系统的学习数据结构的地方。

    数据结构实验栈和队列详细实验报告

    (1) 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现; (2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的...

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

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

    C语言中栈的顺序存储和链式存储

    C语言中栈的顺序存储和链式存储

    数据结构(C语言版)[严蔚敏]

    《数据结构》(c语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...

    数据结构顺序栈实验2

    编写函数,采用顺序存储实现栈的初始化、入栈、出栈操作。【实验要求】 1、数据要求 顺序表中的数据是图书信息(书号、书名、价格)。 2、输入要求 输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本...

    严蔚敏:数据结构题集(C语言版)

    · 《数据结构(C语言版) 严蔚敏主编》内容提要: 《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参考教材。本书的前半部分从抽象数据类型的角度讨论各种基本类型...

    数据结构(C语言版)

    6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼树及其应用 ...

    《数据结构》(C语言版)严蔚敏

    《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...

    栈的操作及应用

    (2)给出在顺序存储结构上实现栈的入栈操作的基本设计思想,并用C语言实现。 (3)给出在顺序存储结构上实现栈的出栈操作的基本设计思想,并用C语言实现。 (4)给出使用顺序栈实现进制转换的基本设计思想,并用...

    数据结构(C语言)代码实例 (1)

    栈的顺序存储结构的相关算法,包括初始化、压栈、出栈、取栈顶元素、判断栈是否为空、返回栈长度、栈的遍历、清栈、销毁栈

    严蔚敏 数据结构(C语言版) 代码 23490 书中算法

    2.2.1 线性表的顺序存储表示 19 2.2.2 顺序表中基本操作的实现 20 2.3 线性表的链式表示和实现 24 2.3.1 单链表的定义和表示 24 2.3.2 单链表基本操作的实现 26 2.3.3 循环链表 31 2.3.4 双向链表 32 ...

    顺序栈验证试验

    简单的顺序栈的使用 验证 了解一下顺序栈的基本用法

    数据结构 c语言版

    6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼...

    数据结构—使用C语言(第4版)【朱战立-电子教案】

    串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 【第5章】 数组 数组的基本概念 动态数组 特殊矩阵 稀疏矩阵 【第6章】 递归算法 递归的概念 递归算法的执行过程 递归算法的设计方法 递归过程和...

Global site tag (gtag.js) - Google Analytics