链栈基本操作的实现
编程实现链栈的初始化、入栈、出栈和计算栈中元素个数等基本操作。(测试数据为整数。)
输入
第一行为入栈元素的个数;
第二行为入栈元素;
出栈操作的次数n.
输出
n次出栈后的栈顶元素。如果是空栈,输出-1.
样例输入
4
1 2 3 4
2
样例输出
2
#include<stdio.h>
#include<malloc.h>
struct LinkNode
{
int data;//储存数值
struct LinkNode* next;//储存下一个结点指针
};
struct LinkNode *Create(int n)//创建单链表
{
struct LinkNode *head,*p1;//声明头指针和p1操作指针
head=p1=(struct LinkNode*)malloc(sizeof(struct LinkNode));//申请空间,并且将head,p1指向这个空间
for(int i=1;i<n;i++)//循环储存单链表第一个数据和倒数第二个数据
{
scanf("%d",&p1->data);
p1->next=(struct LinkNode*)malloc(sizeof(struct LinkNode));//储存一个数据后p1->next指向一个新的空间 ,即下一个结点的空间
p1=p1->next;//p1指向下一个结点
}
scanf("%d",&p1->data);//储存单链表最后一个数据
p1->next=NULL;//后面没有结点了,所以设置为空
return head;//返回创建的单链表的头指针
}
void pull(int m, LinkNode *&head)
{
LinkNode *p;
for(int i=0;i<m;i++)
{
if(head->next!=NULL)
{
head=head->next;
}
else
{
head=NULL;
break;
}
}
}
int main()
{
int n,m;
struct LinkNode *head,*p;//声明头指针和操作指针
scanf("%d",&n);
head=Create(n);//获取头指针的值
scanf("%d",&m);
if(n-m-1<=0)
{
printf("-1");
}
else
{
pull(n-m-1,head);
printf("%d",head->data);
}
return 0;
}
/*
#include<stdio.h>
int main()
{
int a[100];
int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
if(m>=n)
printf("-1");
else
printf("%d",a[n-m-1]);
}
*/