计算机数据结构考研题目

              最近做了一个数据结构的考研题目,跟大家分享一下。

              题目如下:

                             计算机数据结构考研题目_第1张图片


              这道题用指针的方法来做是很合适的。其实,只追求做出来的话,大可以遍历到尾节点,再往前遍历,求出第n个元素的data。这样的话,肯定不是最高效的算法。不知道大家有没有听过跟班指针。

              我的思路是这样的:定义两个指针,前指针f,后指针b,相当于b是f的跟班指针,两个指针之间的距离保持不变。首先,f和b指向头结点,然后f = f->next; 当f指向顺序第n个元素的时候,b开始执行b = b->next;  当f指向最后一个节点的时候,此时的b指向的就是链表的倒数第n个元素,因为f和b之间的距离一直保持n个元素的差距。

              下面是简单的代码,我说一下,我主要想表达这种思想,所以有点没有按照题目要求,题目说只知道头指针List,但我这里事先规定了链表的长度。不过帮助理解这种思想还是不错的。这种算法至少比第一种好。

               

#include
using namespace std;
//链式表
struct List
{
	int data;
	List *next;
};
//初始化
List *Init_List(List *head)
{
	List *p;
	p = head = new List;
	for(int i=1; i<=10; i++)
	{
		p->data = i;
		p->next = new List;
		p = p->next;
	}
	cout<<"初始化完成!"<data<<" ";
		p = p->next;
		i++;
	}
	cout<next;         //找到顺序的第n个元素
		i++;
		if(i>n)              //当到达第n个元素的时候,后指针开始往后走
		{
			b = b->next;
		}
	}
//前指针已经到达最后,由于前后指针相差n个元素,所以此时的后指针指的就是倒数第n个元素,返回
	return (b->data);      
}
int main()
{
	int num,t;
	List *head = new List;
	head = NULL;
	head = Init_List(head);
	Show_List(head);
	cout<<"输入n:(链式表倒数第n个元素)"<>t;
	loop:
	if(t>10)              //若超出链表长度,要求重新输入
	{
		cout<<"已超出链式表长度!"<>t;
		goto loop;
	}
	num = Locate_List(head,t);
	cout<<"链式表倒数第"<

            运行结果:

                计算机数据结构考研题目_第2张图片

你可能感兴趣的:(数据结构,c++学习笔记,决定上路,就不会放弃,(计算机考研道路),考研,计算机,数据结构,指针,线性表)