当前位置:网站首页>鏈棧實現(C語言)
鏈棧實現(C語言)
2022-07-22 20:31:00 【安若兮~】
所謂鏈棧,就是用鏈的方式來實現棧,我們之前對鏈和棧都有過學習,所以實現起來相對簡單
為什麼要用鏈來實現棧呢?我們知道鏈的尾插和尾删都很容易實現,所以我們可以用鏈來實現棧
棧:先進後出,後進先出
鏈:有頭節點(相對簡單)每次入棧就是在鏈後面進行插入,出棧就是删除最後一個節點
頭文件的設計
typedef int ELEM_TYPE;
typedef struct Lstack {
ELEM_TYPE data;
struct Lstack* next;
}Lstack,*PLstack;
void Init_lstack(PLstack pls);
struct Lstack* BuyNode(ELEM_TYPE val);
bool Push(PLstack pls,ELEM_TYPE val);
bool Pop(PLstack pls, ELEM_TYPE* rtval);
bool Top(PLstack pls, ELEM_TYPE* rtval);
int Get_length(PLstack pls);
bool IsEmpty(PLstack pls);
void Clear(PLstack pls);
void Destory(PLstack pls);
void show(PLstack pls);
頭文件聲明的定義
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"LStack.h"
void Init_lstack(PLstack pls) {
assert(pls!=NULL);
pls->next = NULL;
}
struct Lstack* BuyNode(ELEM_TYPE val) {
struct Lstack* pnewnode = (struct Lstack*)malloc(sizeof(struct Lstack));
assert(pnewnode != NULL);
if (pnewnode==NULL) {
return NULL;
}
pnewnode->data = val;
return pnewnode;
}
bool Push(PLstack pls, ELEM_TYPE val) {
assert(pls != NULL);
struct Lstack* pnewnode = BuyNode(val);
if (pnewnode==NULL) {
return false;
}
pnewnode->next = pls->next;
pls->next = pnewnode;
return true;
}
bool Pop(PLstack pls, ELEM_TYPE* rtval) {
assert(pls != NULL);
if (IsEmpty(pls)) {
return false;
}
struct Lstack* p = pls->next;
*rtval = p->data;
pls->next = p->next;
free(p);
p = NULL;
return true;
}
bool Top(PLstack pls, ELEM_TYPE* rtval) {
assert(pls != NULL);
if (IsEmpty(pls)) {
return false;
}
*rtval = pls->next->data;
return true;
}
int Get_length(PLstack pls) {
int count = 0;
for (struct Lstack* p = pls->next; p != NULL;p=p->next) {
count++;
}
return count;
}
bool IsEmpty(PLstack pls) {
return pls->next == NULL;
}
void Clear(PLstack pls) {
Destory(pls);
}
void Destory(PLstack pls) {
assert(pls!=NULL);
while (pls->next!=NULL) {
struct Lstack* p = pls->next;
pls->next = p->next;
free(p);
p = NULL;
}
}
void show(PLstack pls) {
for (struct Lstack* p = pls->next; p != NULL;p=p->next) {
printf("%5d",p->data);
}
printf("\n");
}
測試文件
測試用例
边栏推荐
- She studied in the fourth series of strength, changed her tutor twice in six years, and with a little "stubbornness", Yu Zhou became one of the pioneers of social Chatbot
- Kubernetes基础入门
- vim 使用tips
- Vscode关闭自动更新
- 修改QtCreater界面大小
- Signal noise reduction method
- 1091 Acute Stroke (30 分)
- 1030 Travel Plan (30 分)
- LeetCode912——sort an array—— quick sort algorithm
- Rag summary
猜你喜欢
Cmake+opencv+mingw
Aminer paper recommendation
Leetcode0002——Add Two Numbers——Linked List
基于canny的亚像素的Devernay Algorithm
Pytorch不同层设置不同学习率
LeetCode206——反转链表
AMBert
canny边缘检测
LeetCode32——next permutation
What is network hijacking? How to repair web pages that have been tampered with and hijacked (final scheme) how to repair web page hijacking?
随机推荐
《因果学习周刊》第10期:ICLR2022中最新Causal Discovery相关论文介绍
Aminer paper recommendation
Generate an external inspection script to delete all tables in the database
Replace some escape characters with characters of the specified standard
没有人知道TikTok的最新流行产品Pink Sauce中含有什么成分
Easy operation commands of ES for getting started with elastic search (II)
mysql引擎
1038 Recover the Smallest Number (30 分)
How to repair DNS hijacking perfectly? How to solve DNS hijacking and how to repair it perfectly
pytorch 动态调整学习率,学习率自动下降,根据loss下降
Introduction to elastic search: search full text search (7)
Unix C语言POSIX的线程创建、获取线程ID、汇合线程、分离线程、终止线程、线程的比较
正则表达式学习笔记
AMBert
LeetCode912——sort an array—— quick sort algorithm
Flask cross domain
LeetCode0003——longest substring without repeating characters——Sliding Window
AMiner论文推荐
SSM框架整合
1087 All Roads Lead to Rome (30 分)