C語言中棧的兩種實現(xiàn)方法詳解
更新時間:2021年08月20日 15:06:07 作者:__山頂洞人__
棧只允許在一端進行插入或刪除操作的線性表。首先棧是一種線性表,但是限定這種線性表只能在某一端進行插入和刪除操作,這篇文章主要介紹了C語言對棧的實現(xiàn)基本操作
一、順序棧
#include<stdio.h>
#include<stdlib.h>
#define maxsize 64
//定義棧
typedef struct
{
int data[maxsize];
int top;
}sqstack,*sqslink;
//設置???
void Clearstack(sqslink s)
{
s->top=-1;
}
//判斷棧空
int Emptystack(sqslink s)
{
if (s->top<0)
return 1;
else
return 0;
}
//進棧
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);
}

二、鏈式棧
#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;
}
// 進棧
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)文章
簡單對比C語言中的fputs()函數(shù)和fputc()函數(shù)
這篇文章主要介紹了簡單對比C語言中的fputs()函數(shù)和fputc()函數(shù),注意其之間的區(qū)別,需要的朋友可以參考下2015-08-08
C/C++: Inline function, calloc 對比 malloc
以下是對c/c++中的malloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進行了介紹,需要的朋友可以過來參考下2016-07-07

