最后一次数据结构上机(11.7)

第一题单链表

1)创建n个元素的单链表  void  create()

2)计算链表中大于x的节点个数int countx(int x)

3)创建两个链表,然后取交集

以下源代码:

head.h

#pragma once
#include<iostream>
#include<stdlib.h>
using namespace std;

list.h

#pragma once
#include"head.h"
int hashTable[100]={0};

typedef struct node
{
	int data;
	node *next;
}node;

class list
{
	node *head;
public:
	list(){}
	~list(){}
	void create(int n);
	void print();
	void search();
	void del();
	int countx(int x);
};

void list::del()
{
	bool hashTable_a[100]={false};
	node *p,*pa;
	p=head->next;
	while(p)
	{
		if(hashTable_a[p->data]==false)
		{
			hashTable_a[p->data]=true;
			pa=p;
			p=p->next;
		}
		else
		{
			pa->next=p->next;
			delete (p);
			p=pa->next;
		}
	}
}

void list::search()
{
	node *p;
	p=head->next;
	while(p)
	{
		hashTable[p->data]++;
		p=p->next;
	}
}

void list::create(int n)
{
	node *p;
	head=new node;
	head->next=NULL;
	for(int i=0;i<n;i++)
	{
		int a;
		cin>>a;
		p=new node;
		p->data=a;
		p->next=head->next;
		head->next=p;
	}
}

void list::print()
{
	node *p;
	p=head->next;
	while(p)
	{
		cout<<p->data<<' ';
		p=p->next;
	}
	cout<<endl;
}

int list::countx(int x)
{
	node *p;
	p=head->next;
	int count=0;
	while(p)
	{
		if(p->data>x)
			count++;
		p=p->next;
	}
	return count;
}

main.cpp

#include"list.h"

int main(void)
{
	int n,m;
	cin>>n;
	list A;
	A.create(n);
	A.countx(2);
	A.del();
	A.search();
	cin>>m;
	list B;
	B.create(m);
	B.countx(2);
	B.del();
	B.search();
	for(int i=0;i<100;i++)
	{
		if(hashTable[i]==2)
			cout<<i<<' ';
	}
	cout<<endl;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41938259/article/details/83820352