您的位置:首页 > 理论基础 > 数据结构算法

C语言数据结构-栈-链表实现

2017-07-29 21:22 585 查看
栈头文件:

#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
typedef struct Node{
int data;
struct Node *next;
}Node, *PNode;

typedef struct LinkStack{
PNode top;
}LinkStack, *PLinkStack;

PLinkStack init(void);

int push(int data,PLinkStack pStack);

int pop(PLinkStack pStack,int *data);

int getTop(PLinkStack pStack,int *data);

void printStack(PLinkStack pStack);

#endif // LINKSTACK_H_INCLUDED


栈代码实现:

#include <stdio.h>
#include <stdlib.h>
#include "LinkStack.h"

PLinkStack init(void){
PLinkStack pStack=(PLinkStack)malloc(sizeof(struct LinkStack));
pStack->top=NULL;
}

//链表结构: null<-p1<-p2, 是从右到左的顺序
int push(int data,PLinkStack pStack){
PNode pNode=(PNode)malloc(sizeof(struct Node));
pNode->data=data;
pNode->next=pStack->top;
pStack->top=pNode;
}

int pop(PLinkStack pStack,int *data){
PNode tNode=pStack->top;
if(tNode==NULL){
return 0;
}
//指针类型变量取值
*data=tNode->data;
pStack->top=tNode->next;
free(tNode);
return 1;
}

int getTop(PLinkStack pStack,int *data){
PNode tNode=pStack->top;
if(tNode==NULL){
return 0;
}
*data=tNode->data;
return 1;
}

void printStack(PLinkStack pStack){
PNode tNode=pStack->top;
while(tNode!=NULL){
printf("Node:%d->",tNode->data);
tNode=tNode->next;
}
printf("\n");
}

int main()
{
PLinkStack linkStack=init();
push(1,linkStack);
push(2,linkStack);
push(3,linkStack);
int data;
pop(linkStack,&data);
printf("pop top data=%d\n",data);

int top;
getTop(linkStack,&top);
printf("current top data=%d\n",top);

printStack(linkStack);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 链表