码迷,mamicode.com
首页 > 其他好文 > 详细

线性表之单链表

时间:2014-09-23 15:25:04      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:des   blog   io   os   ar   for   div   sp   c   

#include<iostream>
using namespace std;
/*
有一个头节点
元素的小标都是从1开始
头节点的下表是0
头节点的value代表链表长度
*/
struct LinkNode
{
	int value;
	LinkNode* next;
};
LinkNode* createLinkList()
{
	LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode));
	head->next=NULL;
	head->value=0;
	return head;
}
bool insertElem(int pos,int value,LinkNode* head)
{
	if(pos<=0)return 0;
	LinkNode* p = head;
	int j=0;
	while(p!=NULL && j<pos-1)//定位到pos-1的元素,也就是待插入元素的前一个元素
	{
		p=p->next;
		j++;
	}
	if(p!=NULL)//限制插入元素的位置是 【1,链表长度+1】这个闭区间
	{
		LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
		newNode->value=value;
		newNode->next=p->next;
		p->next=newNode;
		head->value++;
		return 1;
	}
	return 0;
}
bool deleElem(int pos,LinkNode* head)
{
	if(pos<=0)return 0;
	LinkNode* p = head;
	int j=0;
	while(p!=NULL && j<pos-1)
	{
		p=p->next;
		j++;
	}
	if(p!=NULL && j<head->value)//限制删除元素的位置是 【1,链表长度】这个闭区间
	{ 
		LinkNode* q = p->next;
		p->next=q->next;
		delete(q);
		head->value--;
		return 1;
	}
	return 0;
}
void clearLinkList(LinkNode* head)
{
	LinkNode*p = head->next;
	while(p!=NULL)
	{
		LinkNode*q=p->next;
		deleElem(1,head);//每次删除第一个,逐个删除
		p=q;
	}
}
void destroyLinkList(LinkNode* head)
{
	clearLinkList(head);
	delete head;
	head = 0;
}

void outPut(LinkNode* head)
{
	if(head == NULL)
	{
		cout<<"link list dose not exist"<<endl;
		return;
	}
	if(head->value==0)
	{
		cout<<"link list is empty"<<endl;
		return;
	}
	LinkNode* p = head->next;
	while(p!=NULL)
	{
		cout<<p->value<<" ";
		p=p->next;
	}
	cout<<endl;
}
void main()
{
	int len=12;
	LinkNode* L= createLinkList();
	int v;
	for(int i=0;i<len;i++)
	{
		v = rand() % 100;
		cout<<v<<" ";
		insertElem(1,v,L);//每次在链表尾部插入,使得输入的顺序和链表中的顺序相反
	}
	cout<<endl;
	outPut(L);
	destroyLinkList(L);
	//outPut(L);

	L= createLinkList();
	for(int i=0;i<len;i++)
	{
		v = rand() % 100;
		cout<<v<<" ";
		insertElem(L->value+1,v,L);//每次在链表尾部插入,使得输入的顺序和链表中的顺序一致
	}
	cout<<endl;
	outPut(L);

	insertElem(3,999,L);
	outPut(L);

	insertElem(100,999,L);
	outPut(L);

	insertElem(L->value,9999,L);
	outPut(L);

	insertElem(L->value+1,8888,L);
	outPut(L);

	insertElem(1,7777,L);
	outPut(L);

	deleElem(1,L);
	outPut(L);

	deleElem(100,L);
	outPut(L);

	deleElem(7,L);
	outPut(L);

	deleElem(L->value,L);
	outPut(L);

	clearLinkList(L);
	outPut(L);
	cin>>len;
}

 

线性表之单链表

标签:des   blog   io   os   ar   for   div   sp   c   

原文地址:http://www.cnblogs.com/kbyd/p/3988169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!