1.查找序列元素

问题描述 :
使用带头结点的单链表编程:
一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。

输入说明 :
第一行输入学生信息:
第一个整数n(0<=n<=100),表示共有n个学生,其后有n个整数,表示n个学生的学号
第二行及以后各行,每行输入一个整数,表示要查找的学生学号。

输出说明 :
对于每个要查找的学号,输出一个整数,表示要查找学生的位置。如果共有n个学生,则位置序号为1~n。
如果学生不存在,输出“no”,不包括双引号。
每个输出占一行。

输入范例 :
12 50 51 52 53 54 49 4 5 10 11 9 12
50
11
12
3

输出范例 :
1
10
12
no

#include<iostream>
using namespace std;

struct ListNode {
    
    
	int num;
	struct ListNode *next;
};

//尾插法创建链表
ListNode *createByTail() {
    
    
	ListNode *head;
	ListNode *p1,*p2;
	head = new ListNode;
	p1 = head;
	int cnt,num;	//学生个数和学号
	cin>>cnt;
	for(int i = 0; i < cnt; i++) {
    
    
		cin>>num;
		p1 = new ListNode;
		p1->num = num;
		p2->next = p1;
		p2 = p1;
	}
	p2->next = NULL;
	return head;
}

//遍历链表
void displayLink(ListNode *head) {
    
    
	ListNode *p = head;
	cout<<"head-->";
	while(p != NULL) {
    
    
		cout<<p->num<<"-->";
		p = p->next;
	}
	cout<<"tail"<<endl;
}

//根据学号找学生是第几个
void search(ListNode *head,int num) {
    
    
	int i = 1;
	ListNode *p = head->next;
	while(p != NULL) {
    
    
		if(p->num == num) {
    
    
			break;
		}
		p = p->next;
		i++;
	}
	if(p != NULL) {
    
    
		cout<<i<<endl;
	}
	else {
    
    
		cout<<"no"<<endl;
	}
}

int main() {
    
    
	struct ListNode *head;
	int num;
	head = createByTail();
	while(cin>>num) {
    
    
		search(head,num);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37924213/article/details/108477396