Code

/*链表实现栈的一系列操作*/

#include<stdio.h>
#include<stdlib.h> #define OK 1
#define ERROR 0 typedef struct node
{
int data;
struct node *next;
}LinkStackNode,*LinkStack; /**********************各个子函数的定义*********************/
void initStack(LinkStack *top); //初始化链栈
int push(LinkStack top,int n); //链栈进栈操作
void pop(LinkStack top); //链栈出栈操作
int getTop(LinkStack top,int *s); //读取链栈栈顶元素 int main()
{
LinkStack top;
int choice;
while(true)
{
printf("*****************Please enter your choice*****************\n\n");
printf(" choice 1:Stack initialization\n");
printf(" choice 2:Into the stack\n");
printf(" choice 3:Out of the stack\n");
printf(" choice 4:Read the stack elements\n");
printf(" choice 0:exit\n\n");
scanf("%d",&choice);
switch(choice)
{
case :
initStack(&top);
break;
case :
int n;
printf("Please enter the number into the stack elements:");
scanf("%d",&n);
(push(top,n)==)?printf("%d个元素依次进栈成功\n",n):printf("%d个元素依次进栈失败\n",n);
break;
case :
pop(top);
break;
case :
int* s;
(getTop(top,s)==)? printf("栈顶元素是:%d.\n",*s):printf("An empty stack error!!!!\n"); //三目运算符
break;
case :
exit();
break;
default:
printf("ERROR!!\n");
exit();
break;
}
}
return ;
} /**********************各个子函数功能的实现*********************/
void initStack(LinkStack *top)
{ //初始化
*top=(LinkStack)malloc(sizeof(LinkStackNode)); //带头结点的单链表
(*top)->next=NULL;
} int push(LinkStack top,int n) //进栈 ,将元素压入栈中
{
LinkStackNode *temp;
int n1,n2;
printf("Please enter into the stack elements in turn:\n");
for(n1=;n1<n;n1++)
{
scanf("%d",&n2);
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode)); //结点申请空间
if(temp==NULL) return ERROR; //申请空间失败
temp->data=n2;
temp->next=top->next; //采用头插法存储元素
top->next=temp;
}
return OK;
} void pop(LinkStack top) //栈顶元素出栈
{
int a;
LinkStackNode *temp;
if(top->next==NULL)
{ //栈为空,出栈失败
printf("An empty stack error!!!!\n");
}
else
{
temp=top->next;
a=temp->data;
top->next=temp->next;
free(temp);
printf("栈顶元素%d出栈成功.\n",a);
}
} int getTop(LinkStack top,int *s) //获读取栈顶元素
{
if(top->next==NULL) //栈为空,读取栈顶元素失败
{
return ERROR;
}
else
{
*s=(top->next)->data; //读取栈顶元素,不出栈
return OK;
}
}

C语言实现链栈的初始化&进栈&出栈&读取栈顶元素的更多相关文章

  1. C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素

    /*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...

  2. C语言实现链队列的初始化&进队&出队

    /*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...

  3. C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2

    /*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...

  4. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

  5. C语言初始化——栈的初始化

    栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...

  6. C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...

  7. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  8. 纯C语言实现链栈

    #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...

  9. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...

随机推荐

  1. S2.1 修复图像小程序(简单版)

    用OpenCV自带的inpaint()演示 CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask, OutputArray ...

  2. php操作数组函数

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  3. ORM框架之SQLAchemy

    SQLAchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 1.安装 ...

  4. ztree设置节点checked,选中某节点等相关操作

    ztree设置节点checked,选中某节点等相关操作 1.根据id获取树的某个节点: var zTree = $.fn.zTree.getZTreeObj("mytree"); ...

  5. php基础-cookie&session

    设置cookie //设置cookie setcookie('key', 'value', time() + 60, '/'); 设置session //必须开启session session_sta ...

  6. su;su -;sudo;sudo -i;sudo su;sudo su - 之间的区别

    今天我们来聊聊su;su -;sudo;sudo -i;sudo su;sudo su -他们之间的区别. su :su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就 ...

  7. RaspberryPi上建立wordpress

    准备工作: 1.RaspberryPi 3代 B型 2.可用内存卡 3.读卡器 4.DiskGenius 5.Win32 Disk Imager 6.可用局域网 7.Xshell 和 Xftp 8.官 ...

  8. Mybatis Mapper文件中的一小坑

    前几天来一需求,实现过程中需要修改一个底层的查询接口,具体修改就是在where中添加一个条件,由于这个底层SQL使用的地方太多,所以就想着是用if加一标识符做个判断,传一个只有我会使用的参数,然后动态 ...

  9. 2018申请淘宝客AppKey

    1.www.alimama.com 申请账号进入后2.进入我的联盟,按下面的步骤 完成以后等待网站审核. 3.审核完成后 按以下的图,申请进入开放平台或得appkey 4.最后就可以进入开放平台申请看 ...

  10. 急急如律令!火速搭建一个C#即时通信系统!(附源码分享——高度可移植!)

    (2016年3月更:由于后来了解到GGTalk开源即时通讯系统,因此直接采用了该资源用于项目开发,在此对作者表示由衷的感谢!) —————————————————————————————————— 人 ...