栈的链式存储结构称为链栈,它是运算受限的单链表,其插入和删除操作仅限制在栈顶进行。
先将练习结果贴下
相关C代码如下:
/*数据结构之栈*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int DataType;
/*定义栈的结构体类型*/
typedef struct NODE{
DataType data;
NODE * pNext;
}Node,* PNode;
typedef struct STACK{
PNode pTop;
PNode pBot;
}Stack,* PStack;
void InitStack(PStack); //初始化栈
bool isEmpty(PStack); //判断栈是否为空
void Push(PStack,DataType val); //进栈函数
bool Pop(PStack,DataType *x); //出栈操作
DataType GetTop(PStack); //取栈顶元素
void show_Stack(PStack); //列出栈的内容
void main(){
Stack S;
DataType x;
InitStack(&S); //初始化栈
Push(&S,3); //元素3入栈
Push(&S,4); //元素4入栈
Push(&S,100); //元素100入栈
Push(&S,200); //元素200入栈
Push(&S,2016); //元素2016入栈
show_Stack(&S); //显示当前栈各个元素
if(Pop(&S,&x)){ //出栈操作,并显示出栈的元素
printf("出栈操作成功,当前出栈的元素是%d\n",x);
}
show_Stack(&S);
printf("当前栈顶的元素是%d\n",GetTop(&S)); //显示栈顶元素
}
void InitStack(PStack pS){ //栈的初始化,
pS->pBot=(PNode)malloc(sizeof(Node));
if(pS->pBot == NULL){
printf("初始化栈失败");
exit(-1);
}else{
pS->pTop =pS->pBot;
pS->pBot->pNext=NULL;
}
}
bool isEmpty(PStack pS){
if(pS->pTop == pS->pBot){
return true;
}else{
return false;
}
}
/*进栈操作*/
void Push(PStack pS,int val){
PNode pNew = (PNode)malloc(sizeof(Node));
if(pNew == NULL){
printf("程序内存分配失败");
exit(-1);
}else{
pNew->data=val;
pNew->pNext=pS->pTop;
pS->pTop= pNew;
}
}
/*出栈操作*/
bool Pop(PStack pS,DataType * x){
if(isEmpty(pS)){
printf("栈里面没有数据了.");
return false;
}else{
PNode p=pS->pTop;
*x=p->data;
pS->pTop=p->pNext;
free(p);
return true;
}
}
/*获取栈顶元素的值*/
DataType GetTop(PStack pS){
if(isEmpty(pS)){
printf("目前栈是空的,请稍后在试.");
exit(-1);
}else{
PNode p=pS->pTop;
return p->data;
}
}
/*打印栈列表*/
void show_Stack(PStack pS){
int cnt=0;
PNode P = pS->pTop;
printf("栈的列表信息如下:\n");
while(P != pS->pBot){
printf("%d ",P->data);
P = P->pNext;
cnt++;
}
printf("\n栈的长度是%d:\n",cnt);
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。