C語言中棧的兩種實(shí)現(xiàn)方法詳解
更新時(shí)間:2021年08月20日 15:06:07 作者:__山頂洞人__
棧只允許在一端進(jìn)行插入或刪除操作的線性表。首先棧是一種線性表,但是限定這種線性表只能在某一端進(jìn)行插入和刪除操作,這篇文章主要介紹了C語言對(duì)棧的實(shí)現(xiàn)基本操作
一、順序棧
#include<stdio.h>
#include<stdlib.h>
#define maxsize 64
//定義棧
typedef struct
{
int data[maxsize];
int top;
}sqstack,*sqslink;
//設(shè)置???
void Clearstack(sqslink s)
{
s->top=-1;
}
//判斷???
int Emptystack(sqslink s)
{
if (s->top<0)
return 1;
else
return 0;
}
//進(jìn)棧
int Push(sqslink s, int x)
{
if (s->top>=maxsize-1)
return 0;
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
// 出棧
int Popstack(sqslink s)
{
int n;
if (Emptystack(s)>0)
return NULL;
else
{
n=s->data[s->top];
s->top--;
return n;
}
}
void main()
{
sqslink s1;
s1 =(sqslink)malloc(sizeof(sqstack));
Clearstack(s1);
printf("%d\n",s1->top);
for(int i=0; i<=10;i++)
{
Push(s1, i);
printf("%d is pushed into stack\n",i);
}
printf("top is point to %d\n",s1->top);
printf("\n");
int n;
n = Popstack(s1);
printf("number %d is poped\n",n);
printf("top is point to %d\n",s1->top);
}

二、鏈?zhǔn)綏?/h2>
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node * next;
}snode,*slink;
struct Node
{
slink i;
slink n;
};
// 清空棧
void Clearstack(slink top)
{
top=NULL;
}
//判斷棧是否為空
int Emptystack(slink top)
{
if (top==NULL) return 1;
else return 0;
}
// 進(jìn)棧
slink Push(slink top, int x)
{
slink node = NULL;
node = (slink)malloc(sizeof(snode));
node->data = x;
node->next = top;
top = node;
printf("*************************\n");
printf("%d",top->data);
printf("*************************\n");
return top;
}
// 出棧
struct Node Pop(slink top)
{
slink node = NULL;
struct Node result;
if (Emptystack(top))
{
result.i=node;
}
else
{
int n;
node = top;
top = node->next;
result.i = top;
result.n = node;
return result;
}
}
void main()
{
slink top_ = NULL;
for(int i =0; i<10;i++)
{
top_ = Push(top_, i);
printf("%d is pushed in to the stack\n",i);
}
int e;
e = top_->data;
printf("top is pointint to %d\n",e);
printf("\n");
printf("\n");
printf("\n");
slink node =NULL;
printf("*************************\n");
struct Node result = Pop(top_);
if ((result.i)!=NULL)
{
top_ = result.i;
node = result.n;
e = top_->data;
printf("top is pointint to %d\n",e);
int e_node;
e_node = node->data;
printf("the node Poped 's data is pointint to %d\n",e_node);
free(node);
}
else
{
printf("stack is empty");
}
}
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node * next;
}snode,*slink;
struct Node
{
slink i;
slink n;
};
// 清空棧
void Clearstack(slink top)
{
top=NULL;
}
//判斷棧是否為空
int Emptystack(slink top)
{
if (top==NULL) return 1;
else return 0;
}
// 進(jìn)棧
slink Push(slink top, int x)
{
slink node = NULL;
node = (slink)malloc(sizeof(snode));
node->data = x;
node->next = top;
top = node;
printf("*************************\n");
printf("%d",top->data);
printf("*************************\n");
return top;
}
// 出棧
struct Node Pop(slink top)
{
slink node = NULL;
struct Node result;
if (Emptystack(top))
{
result.i=node;
}
else
{
int n;
node = top;
top = node->next;
result.i = top;
result.n = node;
return result;
}
}
void main()
{
slink top_ = NULL;
for(int i =0; i<10;i++)
{
top_ = Push(top_, i);
printf("%d is pushed in to the stack\n",i);
}
int e;
e = top_->data;
printf("top is pointint to %d\n",e);
printf("\n");
printf("\n");
printf("\n");
slink node =NULL;
printf("*************************\n");
struct Node result = Pop(top_);
if ((result.i)!=NULL)
{
top_ = result.i;
node = result.n;
e = top_->data;
printf("top is pointint to %d\n",e);
int e_node;
e_node = node->data;
printf("the node Poped 's data is pointint to %d\n",e_node);
free(node);
}
else
{
printf("stack is empty");
}
}

總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
如何在程序中判斷VS的版本(實(shí)現(xiàn)方法詳解)
下面小編就為大家?guī)硪黄绾卧诔绦蛑信袛郪S的版本(實(shí)現(xiàn)方法詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
使用C++創(chuàng)建多個(gè)IPC機(jī)制的上層接口
設(shè)計(jì)一個(gè)上層的IPC接口,這個(gè)接口將在未來封裝底層的通信機(jī)制,這樣的設(shè)計(jì)要求接口足夠抽象,以便于底層實(shí)現(xiàn)的細(xì)節(jié)對(duì)上層用戶透明,本文給大家介紹了如何使用C++創(chuàng)建多個(gè)IPC機(jī)制的上層接口,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Qt中圖片旋轉(zhuǎn)縮放操作的實(shí)現(xiàn)
本文主要介紹了Qt中圖片旋轉(zhuǎn)縮放操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
C語言超詳細(xì)講解棧的實(shí)現(xiàn)及代碼
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素2022-04-04
基于C語言掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)
大家好,本篇文章主要講的是基于C語言掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++設(shè)計(jì)模式之組合模式(Composite)
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之組合模式Composite,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04

