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

/*

*创建链栈

*创建一个top指针代表head指针

*采用链式存储结构

*采用头插法创建链表

*操作 创建 出栈 入栈 取栈顶元素

*创建数据域的结构体

*创建数据域的名称指针

*使用随机函数对数据域的编号进行赋值

*/

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define NAMESIZE 255//字符串的最大长度

int count=0;//链栈中数据元素的个数

typedef int IdType;//数据域的数据类型

typedef char *NameType;//数据域名称的数据类型

typedef int Statu;//函数返回值的数据类型

typedef struct elementtype

{

IdType id;

NameType name;//数据域的名称的指针

}ElementType;

typedef struct linkstack

{

ElementType *data;//数据域指针

struct linkstack *next;//指向下一个节点的指针

}Link_Stack;//链栈的结构体

Statu create_linkstack(Link_Stack *top);//链栈的创建

void Init_linkstack(Link_Stack *top);//链栈的初始化

Statu push_linkstack(Link_Stack *top,ElementType key);//入栈

Statu pop_linkstack(Link_Stack *top,ElementType *key);//出栈

Statu getdata_linkstack(Link_Stack*top,ElementType *data);//取栈顶元素

Statu empty_linkstack(Link_Stack*top);//判断栈是否为空

void Display_linkstack(Link_Stack *top);//遍历栈中的数据

void main()

{

Link_Stack *top;

ElementType data;//入栈的数据

ElementType data1;//出栈的元素

ElementType key;//取栈顶元素

top=(Link_Stack*)malloc(sizeof(Link_Stack));

//对链栈进行初始化

Init_linkstack(top);

int result=create_linkstack(top);

if(result==ERROR)

{

printf("链栈创建失败\n");

}

else

{

printf("链栈创建成功\n");

printf("链栈中数据元素的个数为:%d\n",count);

}

if(empty_linkstack(top))

printf("链栈为空\n");

else

printf("链栈不为空\n");

data.name=(NameType)malloc(sizeof(char)*NAMESIZE);

data.id=rand()%50;

printf("请输入入栈的数据的名称:");

scanf("%s",data.name);

int result1=push_linkstack(top,data);

if(result1==ERROR)

printf("入栈失败\n");

else

printf("入栈成功\n");

data1.name=(NameType)malloc(sizeof(char)*NAMESIZE);

int result2=pop_linkstack(top,&data1);

if(result2==ERROR)

{

printf("出栈失败\n");

}

else

{

printf("出栈成功\n");

printf("出栈的元素为[%s,%d]\n",data1.name,data1.id);

}

key.name=(NameType)malloc(sizeof(char)*NAMESIZE);

int result3=getdata_linkstack(top,&key);

if(result3==ERROR)

printf("取栈顶元素失败\n");

else

{

printf("取栈顶元素成功\n");

printf(" 栈顶元素为:[%s,%d]\n",key.name,key.id);

}

printf("栈中数据遍历的结果为\n");

Display_linkstack(top);

}

void Init_linkstack(Link_Stack*top)//链栈的初始化

{

if(top==NULL)

{

printf("链栈初始化失败\n");

return ;

}

else

{

top->next=NULL;

}

}

Statu create_linkstack(Link_Stack *top)//链栈的创建

{

if(top==NULL)

return ERROR;

Link_Stack *s;

char name[NAMESIZE];

s=(Link_Stack*)malloc(sizeof(Link_Stack));

if(s==NULL)

return NULL;

printf("请输入数据域的名称:\n");

while(scanf("%s",name)!=EOF)

{

if(strcmp(name,"^")==0)

break;

else if(s==NULL)

break;

else

{

s->data=(ElementType*)malloc(sizeof(ElementType));

s->data->name=(NameType)malloc(sizeof(char)*NAMESIZE);

strcpy(s->data->name,name);

s->data->id=rand()%30;//data为数据域指针 所以全部使用箭头指向

s->next=top->next;

top->next=s;

count++;//数据元素++

}

s=(Link_Stack*)malloc(sizeof(Link_Stack));

}

return OK;

}

Statu empty_linkstack(Link_Stack*top)//判断栈是否为空

{

if(top->next==NULL)

{

return OK;

}

else

{

return ERROR;

}

}

Statu push_linkstack(Link_Stack *top,ElementType key)//入栈

{

if(top==NULL)

return ERROR;

Link_Stack *s;

s=(Link_Stack*)malloc(sizeof(Link_Stack));

s->data=(ElementType*)malloc(sizeof(ElementType));

s->data->name=(NameType)malloc(sizeof(char)*NAMESIZE);

s->data->id=key.id;

strcpy(s->data->name,key.name);

s->next=top->next;

top->next=s;

return OK;

}

Statu pop_linkstack(Link_Stack *top,ElementType *key)//出栈

{

Link_Stack*node;

if(empty_linkstack(top))

{

return ERROR;

}

else

{

node=top->next;

key->id=node->data->id;

strcpy(key->name,node->data->name);

top->next=node->next;

free(node);//释放其内存

}

}

Statu getdata_linkstack(Link_Stack*top,ElementType *data)//取栈顶元素

{

//取栈顶元素

if(empty_linkstack(top))

return ERROR;

else

{

Link_Stack*node;

node=top->next;

data->id=node->data->id;

strcpy(data->name,node->data->name);

return OK;

}

}

void Display_linkstack(Link_Stack *top)//遍历栈中的数据

{

ElementType data;//出栈的数据

//对栈进行判断是否为空

if(empty_linkstack(top))

return ;

else

{ while(empty_linkstack(top)!=1)

{

data.name=(NameType)malloc(sizeof(char)*NAMESIZE);

if(pop_linkstack(top,&data))

printf("[%s,%d]\t",data.name,data.id);

}

}

}

C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

浅入深出之Java集合框架(下)

Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

浅入深出之Java集合框架(中)

Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到

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

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

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

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

数据结构 - 链栈的实行(C语言)

数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

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

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

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

C语言数据结构----栈与递归

本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...

随机推荐

zerojs! 造出最好的 CMS 轮子

zerojs是一个基于nodejs.angularjs.git的CMS.在它之上可以继续开发出博客.论坛.wiki等类似的内容管理型系统. 拥抱开发者和社区 层次清晰,高度解耦.前后端即使分开也都是完 ...

条款21:必须返回对象object时,不要返回其引用reference

如下为一个有理数类,其中包含一个用来计算乘积的函数: #include using namespace std; class Rational { public: R ...

MYbatis调试日记(三)

如何在Mybatis中插入日期类型的数据 直接见代码: xml配置文件 java代码

【LeetCode】190 & 191 - Reverse Bits & Number of 1 Bits

190 - Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 432615 ...

SQLServer 之 char、varchar、nvarchar的区别

一.定义 1.char char是定长的,也就是当你输入的字符小于你指定的数目时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. 例如:char(8),最多可输入4个汉字或者8个 ...

Android(java)学习笔记93:Android布局详解之一:FrameLayout

FrameLayout是最简单的布局了.所有放在布局里的控件,都按照层次堆叠在屏幕的左上角.后加进来的控件覆盖前面的控件. 在FrameLayout布局里,定义任何空间的位置相关的属性都毫无意义.控件 ...

重燃你的PHP安全分析之火

关于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL injection,XSS,Path Disclosure,Remote ...

Vue H5 History 部署IIS上404问题

背景简介 vue使用vue-router时,默认的地址并不美观,以#进行分割,例如:http://www.xxx.com/#/main. 为了访问地址能像正常的url一样,例如:http://www. ...

《生命》第五集:Birds (鸟类)

看了前四集之后意犹未尽,今天终于有时间来看第五集了. 本集讲的是鸟类,一个在恐龙开始繁荣的时代才开始有的物种. 鸟类和其他动物最不同的地方,就是羽毛,能隔热,保暖,最重要的是:能帮助他们飞行. 在秘鲁 ...

VS2013 中 CString类型转换为LPCSTR类型

HWND hWnd = ::FindWindow(NULL, L"XXXXXXX"); if (hWnd != NULL) { DWORD dwReadBytes; unsigne ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值