您的位置:首页 > 其它

链表作业

2010-10-09 21:26 309 查看
#include<iostream>
using namespace std;
typedef struct Node
{
	int data;
	struct Node *next;
}SLNode, *LinkList;
int len;
void SLLInitiate(SLNode **head)		//初始化
{
	/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
	if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)
		exit(1);
	(*head)->next = NULL;			//置链尾标记NULL
}
int SLLCreate(LinkList &head)		//建立单链表
{
	//逆位序输入n个元素的值,建立带表头结点的单链线性表L
	cout << "Input the amount of List:" << endl; 
	cin >> len; 
	head=(LinkList)malloc(sizeof(SLNode)); 
	head->next = NULL;				//先建立一个带头结点的单链表 
	cout << "Input the List:" << endl; 
	for(int i=0;i<len;++i)
	{ 
		LinkList p=(LinkList)malloc(sizeof(SLNode)); 
		scanf("%d", &p->data);		//输入元素值 
		p->next = head->next;		//插入到表头 
		head->next = p; 
	} 
	return 0;
}
void SLLDisplay(LinkList head)		//对单链表进行输出
{
	LinkList L = head;
	head = head->next;
	printf("The list is:"); 
	while(head) 
	{ 
		printf("%d ",head->data); 
		head = head->next; 
	} 
	head = L; 
	cout << endl;
}
LinkList SLLLocate(LinkList head, int i)//搜索第i个元素并置为当前元素
{
	if(i<=0)
		return 0;
	SLNode *p = head;
	int k = 0;
	while(p!=NULL && k<i)
	{
		p = p->next;
		k++;
	}
	cout  << "The number you Locate is " << p->data << endl;
	return p;
}
SLNode *SLLMax(LinkList head)			//找出具有最大值的结点位置
{
	if(head->next == NULL)
		return 0;
	SLNode *pMax = head->next, *p=head->next->next;
	while(p!=NULL)
	{
		if(p->data > pMax->data)
			pMax = p;
		p = p->next;
	}
	cout << "The largest num of the list is " << pMax->data << endl;
	return pMax;
}
int SLLNumber(LinkList head, int x)				//找出有多少个定值x
{
	int n = 0;
	SLNode *p = head->next;
	while(p != NULL)
	{
		if(p->data == x)
			n++;
		p = p ->next;
	}
	return n;
}
int Create(LinkList &head, int a[], int n)		//建立单链表
{
	//逆位序输入n个元素的值,建立带表头结点的单链线性表L
	head=(LinkList)malloc(sizeof(SLNode)); 
	head->next = NULL;				//先建立一个带头结点的单链表
	for(int i=0;i<len;++i)
	{ 
		LinkList p=(LinkList)malloc(sizeof(SLNode)); 
		p->data = a[i];				//输入元素值 
		p->next = head->next;		//插入到表头 
		head->next = p; 
	}
	cout << "The new list create with a[] is ";
	for(int i=0; i<n; i++)
	{
		cout << a[i] << '/t';
	}
	cout << endl;
	return 0;
}
int SLLInsert(SLNode *head, int i, int x)
{
	/*在带头结点的单链表head的第i(1<=i<=n+1,n为结点个数)个位置插入数据元素*/
	SLNode *p, *q;
	int j;
	/*让指针p指向第i-1个结点*/
	p = head;
	j = 0;
	while(p!=NULL && j<i-1)
	{
		p = p->next;
		j++;
	}
	if(j!=i-1)
	{
		cout << "插入位置参数错!" << endl;
		return 0;
	}
	/*生成新结点由指针q指示*/
	if((q=(SLNode*)malloc(sizeof(SLNode))) == NULL)
		exit(1);
	q->data = x;
	q->next = p->next;
	p->next = q;					//把新结点链入单链表中
	return 1;
}
int SLLDelete(SLNode *head, int i, int *x)
{
	/*删除带头结点的单链表head的第i(1<=i<=n,n为结点个数)个结点。删除结点的数据元素由x带回。删除成功时返回1;否则返回0*/
	SLNode *p, *q;
	int j;
	/*让指针p指向第i-1个结点*/
	p = head;
	j = 0;
	while(p->next!=NULL && j<i-1)
	{
		/*注意:这里要用条件p->next!=NULL,而不能用p!=NULL,否则当参数i不合法时,会因p->next不存在而出错*/
		p = p->next;
		j++;
	}
	if(j!=i-1)
	{
		cout << "删除位置参数错!" << endl;
		return 0;
	}
	q = p->next;
	p->next = p->next->next;		//删除指针q所指结点
	*x = q->data;					//把指针q所指结点的数据元素由x带回
	free(q);						//释放指针q所指结点的内存空间
	return 1;
}
int SLLGet(SLNode *head, int i, int *x)
{
	/*取结点元素,和删除函数类同,只是不删除结点i*/
	SLNode *p;
	int j;
	p = head;
	j = 0;
	while(p->next!=NULL && j<i)
	{
		p = p->next;
		j++;
	}
	if(j!=i)
	{
		cout << "取元素位置参数错!" << endl;
		return 0;
	}
	*x = p->data;
	return 1;
}
int SLLNotEmpty(SLNode *head)		//判断是否非空,非空返回1,空返回0
{
	if(head->next == NULL)
		return 0;
	else
		return 1;
}
int main()
{
	int n, x, size;
	LinkList L;
	SLLCreate(L);
	SLLDisplay(L);
	cout << "Input the num you want to Locate: ";
	cin >> n;
	cout << "And the address of the Locate number is " << SLLLocate(L, n) << endl;
	cout << "And the address of the Largest number is " << SLLMax(L) << endl;
	cout << "Input the number you want to statistics ";
	cin >> x;
	cout << "There are " << SLLNumber(L, x) << " of the " << x << " in the list!" << endl;
	cout << "Input the num you want to create the length of the a[]: ";
	cin >> size;
	int *p = new int [size];
	cout << "Input several numbers for the a[] to create a new list : " << endl;
	for(int i=0; i<size; i++)
	{
		cin >> p[i];
	}
	cout << "The members of a[] are ";
	for(int i=0; i<size; i++)
	{
		cout << p[i] << '/t';
	}
	cout << endl;
	Create(L, p, size);
	delete []p;
	system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: