c語言實現鏈棧基本功能
阿新 • • 發佈:2019-01-27
typedef struct node{
int data;
node *next;
}Node,*pNode;
typedef struct{
pNode top;
int count;
}LinkStack,*pLinkStack;
注意:(1).首先定義節點結構體,每一個鏈棧都有棧頂節點,用top是指向棧頂節點
(2).對鏈棧進行操作可以用指標,通過->進行操作
鏈棧初始化:
void init(pLinkStack s){
s->top=NULL;
s->count=0;
}
注意:(1).初始化一定要把指向棧頂節點設為NULL,要不然最後while停不下
入棧:
void push(pLinkStack s,int a){
pNode p=(pNode)malloc(sizeof(Node));
p->data=a;
p->next=s->top;
s->top=p;
s->count++;
}
出棧:
int pop(pLinkStack s){
pNode p=s->top;
int a=p->data;
s->top=p->next;
s->count--;
free(p);
return a;
}
注意:(1).出棧記得釋放p節點
完整程式碼如下:
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct node{ int data; node *next; }Node,*pNode; typedef struct{ pNode top; int count; }LinkStack,*pLinkStack; void init(pLinkStack s){ s->top=NULL; s->count=0; } int isEmpty(pLinkStack s){ if(s->top==NULL){ return 1; }else{ return 0; } } void push(pLinkStack s,int a){ pNode p=(pNode)malloc(sizeof(Node)); p->data=a; p->next=s->top; s->top=p; s->count++; } int pop(pLinkStack s){ pNode p=s->top; int a=p->data; s->top=p->next; s->count--; free(p); return a; } int ding(pLinkStack s){ return s->top->data; } int length(pLinkStack s){ return s->count; } int main(){ int len,top,te; LinkStack s; init(&s); push(&s,1); push(&s,3); push(&s,5); push(&s,7); top=ding(&s); len=length(&s); printf("top:%d,len:%d\n",top,len); while(!isEmpty(&s)){ te=pop(&s); printf("刪除的頂部元素為:%d\n",te); } system("pause"); }