基于链表实现入栈,出栈,取栈顶元素的操作
链式栈
入栈 (链表头插) 比较方便
出栈 (链表头删)
头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef char Liststacktype;
typedef struct Liststack
{
Liststacktype data;
struct Liststack* next;
}Liststack;
void ListstackInit(Liststack** phead);
Liststack* ListnodeCreat(Liststacktype value);
void ListnodeDestroy(Liststack* node);
void ListstackPush(Liststack**phead, Liststacktype value);
void ListstackPop(Liststack**phead);
Liststacktype ListstackGet(Liststack*head);
函数实现
#include"liststack.h"
void ListstackInit(Liststack** phead)
{
if (phead == NULL)
{
return;
}
*phead = NULL;
}
Liststack* ListnodeCreat(Liststacktype value)
{
Liststack* new = (Liststack*)malloc(sizeof(Liststack));
new->data = value;
new->next = NULL;
return new;
}
void ListnodeDestroy(Liststack* node)
{
free(node);
node = NULL;
}
void ListstackPush(Liststack**phead, Liststacktype value)
{
if (phead == NULL)
{
return;
}
Liststack* new = ListnodeCreat(value);
Liststack* cur = *phead;
*phead = new;
new->next = cur;
}
void ListstackPop(Liststack** phead)
{
if (phead == NULL)
{
printf("非法输入");
return;
}
if (*phead == NULL)
{
printf("空链表");
return;
}
Liststack* cur = *phead;
*phead = (*phead)->next;
ListnodeDestroy(cur);
return;
}
Liststacktype ListstackGet(Liststack* head)
{
if (head == NULL)
{
return;
}
Liststack* cur = head;
return cur->data;
}
功能测试
void Printchar(Liststack* head, const char *msg)
{
printf("[ %s ]:\n", msg);
if (head == NULL)
{
return;
}
Liststack* cur = head;
while (cur!= NULL)
{
printf("[ %c ]", cur->data);
cur = cur->next;
}
printf("\n");
return;
}
void TeststackPush()
{
FUNCTION();
Liststack* head;
ListstackInit(&head);
ListstackPush(&head, 'a');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'b');
Printchar(head, "入栈一个元素");
}
void TeststackPop()
{
FUNCTION();
Liststack* head;
ListstackInit(&head);
ListstackPush(&head, 'a');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'b');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'c');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'd');
Printchar(head, "入栈一个元素");
ListstackPop(&head);
Printchar(head, "出栈一个元素");
ListstackPop(&head);
Printchar(head, "出栈一个元素");
}
void TeststackGet()
{
FUNCTION();
Liststack* head;
ListstackInit(&head);
ListstackPush(&head, 'a');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'b');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'c');
Printchar(head, "入栈一个元素");
ListstackPush(&head, 'd');
Printchar(head, "入栈一个元素");
Liststack* ret = ListstackGet(head);
printf("栈顶元素:%c\n\n", ret);
ListstackPop(&head);
Printchar(head, "出栈一个元素");
ret = ListstackGet(head);
printf("栈顶元素:%c\n\n", ret);
}
int main()
{
TeststackPush();
TeststackPop();
TeststackGet();
return 0;
}