#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node* next;
};
//表头法
struct stack{
int stakeSize;
struct Node* stackTop;//充当表头
};
//创建链表
struct Node* createList(){
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
//创建栈
struct stack* createStake(){
struct stack* mystake = (struct stack*)malloc(sizeof(struct stack));
mystake->stakeSize = 0;
mystake->stackTop = createList();
return mystake;
}
//创建节点
struct Node* createNode(int mydata){//mydata是存入的数据
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = mydata;
newNode->next = NULL;
return newNode;
}
// 插入节点
void insertNodeByHead(struct Node* headNode,int data){
struct Node* newNode = createNode(data);//创建节点
newNode->next = headNode->next;//新节点指向头结点的下一节点
headNode->next = newNode;//头节点的下一节点变为新节点
}
//打印
void printList(struct Node* headNode){
struct Node* pMove = headNode->next;
while (pMove)
{
printf("%d\t",pMove->data);
pMove = pMove->next;
}
printf("\n");
}
// 入栈
void push(struct stack* mystack,int data){
insertNodeByHead(mystack->stackTop,data);
mystack->stakeSize ++;
}
//删除
void deleteNodeByHead(struct Node* headNode){
struct Node* nextNode = headNode->next;
headNode->next = nextNode->next;
free(nextNode);
nextNode = NULL;
}
int top(struct stack* mystack){
if(mystack->stakeSize == 0){
return -1;
}else{
return mystack->stackTop->next->data;}
}
//删除第一个
void pop(struct stack* mystack){
if(mystack->stakeSize == 0){
printf("staxk is NULL\n");
}else{
deleteNodeByHead(mystack->stackTop);
mystack->stakeSize--;
}
}
int empty(struct stack* mystack){
if(mystack->stakeSize == 0){
return 1;
}else{
return 0;
}
}
int main(){
//测试栈
// struct Node* list = createList();//创建链表
// insertNodeByHead(list,1);
// insertNodeByHead(list,2);
// printList(list);
//测试栈
struct stack* mystack = createStake();
push(mystack,1);
push(mystack,3);
while (!empty(mystack))
{
printf("%d\t",top(mystack));
pop(mystack);
}
return 0;
}
【C语言】使用结构体实现栈
最新推荐文章于 2024-07-25 17:43:13 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)