天天看點

西南科技大學OJ題 鍊棧基本操作的實作1046

鍊棧基本操作的實作

程式設計實作鍊棧的初始化、入棧、出棧和計算棧中元素個數等基本操作。(測試資料為整數。)

輸入

第一行為入棧元素的個數; 
第二行為入棧元素;
出棧操作的次數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]);
}
*/