您的位置:首页 > 其它

单链表的整表创建和删除(四)

2015-08-18 21:11 204 查看
单链表的整表创建和删除

一、单链表的整表创建

创建单链表的过程是一个动态生成链表的过程,从“空表”的初始状态起,依次建立各元素结点并逐个插入链表。

单链表整表创建的算法思路如下:

1)声明一结点P 。2)初始化一空链表L 。3)建立一个带头结点的单链表,即让L的头结点的指针指向NULL。4)循环实现后继结点的赋值和操作。

单链表创建的方法有两种:头插法和尾插法。

1、头插法—把新加进的元素放在表头后的第一个位置。具体操作就是首先是新结点的next指向头结点之后,表头的next指向新结点。

头插法的程序如下:
typedef float ElemType;
typedef struct Node
{
	ElemType data;//数据域
	struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
void CreateLinkList(LinkList L,int n)
{
	LinkList p;
	int i;

	srand(time(0));
	L = (LinkList)malloc(sizeof(Node));//建立表头
	L->Next = NULL;

	for(i = 0;i < n;i++)
	{
		p = (LinkList)malloc(sizeof(Node));
		p->data = rand()%100 + 1;
		p->Next = L->Next;
		L->Next = p;
	}

}


头插法建立的链表,生成的链表中结点的次序和输入的顺序相反。

2、尾插法—新结点都插入到最后。

尾插法程序如下:
typedef float ElemType;
typedef struct Node
{
	ElemType data;//数据域
	struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
void CreateLinkList(LinkList L,int n)
{
	LinkList p,r;
	int i;

	srand(time(0));
	L = (LinkList)malloc(sizeof(Node));//建立表头
	
	r = L;

	for(i = 0;i < n;i++)
	{
		p = (LinkList)malloc(sizeof(Node));
		p->data = rand()%100 + 1;
		r->Next = p;
		r = p;
	}

	r->Next = NULL;
}


二、单链表的整表的删除

单链表整表删除的算法思路如下:

1)声明结点p和q。2)将第一个结点赋值给p,下一结点赋值给q。3)循环执行释放p和将q赋值给p的操作。

单链表整表删除的代码如下:

#define bingo 1
#define error 0

typedef float ElemType;
typedef struct Node
{
	ElemType data;//数据域
	struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;

int clearList(LinkList L)
{
	LinkList p,q;
    
	p = L->Next;//第一个结点

	while(p)
	{
		q = p->Next;
		free(p);
		p = q;
	}

	L->Next = NULL;
	
	return bingo;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: