#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
struct sqsack {
int data;
struct sqsack* next;
};
struct sqsack* Init(struct sqsack* head); //初始化
struct sqsack* Push(struct sqsack* head,int e); //入栈
struct sqsack* Pop(struct sqsack* head); //出栈
void Print(struct sqsack* head); //遍历栈
int Size(struct sqsack* head); //求链栈的长度
int main()
{
int e = 0, size = 0;
struct sqsack* head = NULL;
head = Init(head);
while (e != -1)
{
printf("请输入入栈元素,输入-1结束输入\n");
scanf("%d", &e);
if (e != -1)
{
head = Push(head, e);
}
}
//head = Pop(head);
Print(head);
size = Size(head);
printf("栈长为======== %d \n", size);
return 0;
}
struct sqsack* Init(struct sqsack* head)
{
head = (struct sqsack*)malloc(sizeof(struct sqsack));
if (head == NULL)
{
printf("空间开辟失败\n");
exit(0);
}
else
{
printf("空间开辟成功\n");
head->next = NULL; // 这里你能写成等于号 笑死
return head;
}
}
struct sqsack* Push(struct sqsack* head,int e)
{
struct sqsack* p = NULL;
p = (struct sqsack*)malloc(sizeof(struct sqsack));
p->data = e;
p->next = head;
head = p;
printf("入栈成功\n");
return head;
}
struct sqsack* Pop(struct sqsack* head)
{
int e = 0;
struct sqsack* p = NULL;
if (head->next == NULL)
{
printf("数据为空\n");
}
else
{
p = head;
printf("出栈的数据为======== %d \n", p->data); // 这个p就不需要开辟成节点了,因为指向本身就有的节点
head = head->next;
}
return head;
}
void Print(struct sqsack* head)
{
int data = 0;
struct sqsack* p = head;
if (head->next == NULL)
{
printf("没有数据呢\n");
}
else
{
while (p->next!=NULL)
{
printf("栈中数据===== %d \n", p->data);
p = p->next;
}
}
}
int Size(struct sqsack* head)
{
int e = 0;
struct sqsack* p = head;
if (head->next == NULL)
{
return 0;
}
else
{
while (p->next != NULL)
{
p = p->next;
e++;
}
return e;
}
}
链栈操作—c语言实现
最新推荐文章于 2024-10-04 23:00:36 发布