1. 程式人生 > >最後一次資料結構上機(11.7)

最後一次資料結構上機(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;
}