数据结构之---c语言实现栈及其操作

//c语言实现栈及其基本操作
//杨鑫
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0

typedef int ElementType;
typedef struct node {
    ElementType data;
    struct node *next;
}StackNode, *LinkStack;

void init_stack(LinkStack top)
{
    top->next = NULL;
}

int is_empty(LinkStack top)
{
    if(top->next == NULL)
			return TRUE;
	return FALSE;
}
int push(LinkStack top, ElementType element)
{
    StackNode *temp;
    temp = (StackNode *)malloc(sizeof(StackNode));
    if(temp == NULL) return FALSE;
    temp->data = element;
    temp->next = top->next;
    top->next = temp;
    return TRUE;
}

int pop(LinkStack top, ElementType *element)
{
    if(is_empty(top)) return FALSE;
    StackNode *temp = top->next;
    *element = temp->data;
    top->next = temp->next;
    free(temp);
	return TRUE;
}
void get_top(LinkStack top, ElementType *element)
{
    *element = top->next->data;
}

int main()
{
    LinkStack s;
	int count = 0;
    s = (LinkStack)malloc(sizeof(StackNode));
    init_stack(s);
    int i = 0;
	printf("正在进行压栈操作,请稍后。\n");
	for(i=0; i<100; i++)
        push(s,i);
	printf("已经数据0 ~ 99存储到了栈中!\n");
    int rslt;
    printf("正在出栈\n");
	printf("将栈内元素依次输出!\n");
	printf("栈中元素如下:!\n");
	while (!is_empty(s))
   	{
		if(count % 5 == 0)
				printf("\n");
        pop(s,&rslt);
        printf("%d\t",rslt);
		count++;
    }
	return 0;
}

时间: 2024-09-30 00:59:50

数据结构之---c语言实现栈及其操作的相关文章

【数据结构之旅】顺序栈入门操作

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{    

数据结构(C语言) 栈和队列

栈(stack) 是限定在表尾进行插入或删除操作的线性表,这是栈的定义,所有从本质上来说栈仍旧是线性表的特殊延伸.对栈来说,表尾端有特殊的含义,代表着栈顶(top),相应的,表头端为栈底(bottom).如果一个栈不含元素,则称其为空栈.栈遵循的是后进先出LIFO结构,即Last In First Out.(图) 栈的常用基本操作如下: (1)创造一个空栈 (2)销毁已存在的一个栈 (3)清空栈内数据 (4)判断栈内是否为空 (5)返回栈的长度 (6)返回当前栈顶元素 (7)压入新栈顶元素 (8

数据结构之C语言实现链表的操作

1 /* 2 链表节点的插入与删除 3 4 编译环境:VC++ 6.0||VC++2008||...... 5 编译系统:windows 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> 10 #include <malloc.h> 11 12 // 定义链表中的节点 13 typedef struct node 14 { 15 int member; // 节点中的成员 16 struct node *pNext; /

数据结构(C语言) 栈的应用之括号匹配

#include<stdio.h> #include<stdlib.h> typedef struct SqStack { char str[100]; int top; }SqStack; void Push(SqStack* S, char c) { S->top++; S->str[S->top] = c; } void Pop(SqStack* S, char* c) { *c = S->str[S->top]; S->top--; }

数据结构(C语言) 栈的应用之数制转换

#include<stdio.h> #include<stdlib.h> typedef struct SqStack { int data[100]; int top; }SqStack; void Push(SqStack* S, int e) { S->top++; S->data[S->top] = e; } void Pop(SqStack* S, int* e) { *e = S->data[S->top]; S->top--; }

数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚,所以很多需要自己揣摩.这也体现了算法和程序设计语言的特点,算法更侧重本质的描述,而任何编程语言都要照顾到实现的细节以及数据类型等语法方面的需求. 表达式求值: [编码中....] 二.头文件 迷宫求解: 1 //3_2_maze.h 2 /** 3 author:zhaoyu 4 email:[em

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

数据结构c语言版串的操作

#include<stdio.h> #include<malloc.h> #include<string.h> //定义字符串的结构体 typedef struct { char *str;//字符串 int maxLength;//最大可以存放字符的长度 int length;//目前的字符长度 }DString; //1.初始化操作 //初始化操作用来建立和存储串的动态数组空间以及给相关的数据域赋值 void Initiate(DString *s,int max,

数据结构算法C语言实现(十)--- 3.3栈与递归的实现

一.简介 汉诺塔问题是递归的一个典型例子,而且书上的讲解很详细,对理解C语言函数及函数传参的工作机制很有帮助,值得一看.而且,递归在我看来和分治.DP.贪心等一样是十分优美的思想,值得学习!!! 二.CPP文件 1 //3_3.cpp 2 /** 3 author:zhaoyu 4 email:[email protected] 5 date:2016-6-8 6 note:realize my textbook <<数据结构(C语言版)>> 7 */ 8 //Page 54 9