鍊棧基本操作的實作
程式設計實作鍊棧的初始化、入棧、出棧和計算棧中元素個數等基本操作。(測試資料為整數。)
輸入
第一行為入棧元素的個數;
第二行為入棧元素;
出棧操作的次數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]);
}
*/