本文主要是介绍链栈的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.进栈操作
可以联系对头结点的后插操作
//后插操作:在p结点之后插入元素e
bool InsertNextNode ( LNode *p,ElemType e){if ( p==NULL)return false;
LNode *s = ( LNode *) malloc(sizeof( LNode) ) ;if (s==NULL) //内存分配失败return false;s->data = e; //用结点s保存数据元素es->next=p->next;p->next=s; //将结点s连到p之后return true;
}
2.出栈操作
可以联系到对头结点的“后删“操作
链栈的定义:
typedef struct Linknode{ElemType data; //数据域struct Linknode *next; //指针域
}*LiStack; //栈类型定义
链栈的增删改查功能的实现:
#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node;// 创建新节点
Node *createNode(int data) {Node *newNode = (Node *)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;return newNode;
}// 入栈操作
void push(Node **top, int data) {Node *newNode = createNode(data);newNode->next = *top;*top = newNode;
}// 出栈操作
int pop(Node **top) {if (*top == NULL) {printf("栈为空,无法弹出元素
");return -1;}Node *temp = *top;int data = temp->data;*top = (*top)->next;free(temp);return data;
}// 查看栈顶元素
int peek(Node *top) {if (top == NULL) {printf("栈为空,无法查看顶部元素
");return -1;}return top->data;
}// 判断栈是否为空
int isEmpty(Node *top) {return top == NULL;
}// 显示栈中的元素
void display(Node *top) {if (isEmpty(top)) {printf("栈为空
");return;}printf("栈中的元素:");Node *temp = top;while (temp != NULL) {printf("%d ", temp->data);temp = temp->next;}printf("
");
}int main() {Node *top = NULL;push(&top, 1); // 增加元素1到栈顶push(&top, 2); // 增加元素2到栈顶push(&top, 3); // 增加元素3到栈顶display(top); // 显示栈中的元素printf("栈顶元素:%d
", peek(top)); // 查看栈顶元素printf("弹出元素:%d
", pop(&top)); // 弹出栈顶元素并返回其值display(top); // 显示栈中的元素return 0;
}
这篇关于链栈的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!