输出从键盘输入一组数据的最后K个元素
题目
请写一算法,依次输出通过键盘输入的一组数据的最后K个元素。
约定:以CTRL+Z作为键盘输入结束,并且假设K<=输入的数据元素的个数。
要求:算法中不能出现数组,也不允许有计算输入数据个数的过程。
分析
采用不带头结点单循环链表,建立K个结点的单循环链表。每输入数字就存入链表中,输入结束时,链表中的元素就是最后的K个元素。
代码
typedef struct node{
int data;
struct node *link;
}BNode,*LinkList;
void PRINTENDK(int k){
LinkList list=NULL,p,r;
int a;
for (int i = 1; i <= k; i++) {
p=(LinkList)malloc(sizeof(BNode));
p->data=0;
if (list ==NULL) {
list=p;
}else{
r->link=p;
}
r=p;
}
p->link=list; //建立循环链表,让p的link指向list
p=list; // p指向初始的位置
while (scanf("%d",&a)>0) {
p->data=a;
p=p->link;
}
for (int i = 1; i <=k; i++) {
if (p->data!=0) {
printf("%d,",p->data);
}
p=p->link;
}
}