您的位置:首页 > 编程语言 > C语言/C++

c++学习笔记—单链表基本操作的实现

2015-01-14 21:13 567 查看
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表)、结点的查找、删除、排序、打印输出、逆置、链表销毁等基本操作。

IDE:vs2013



具体实现代码如下:

#include "stdafx.h"
#include <malloc.h>
#include <iostream>
using namespace std;
typedef struct Lnode
{
	int data;
	struct Lnode *next;
}*node;
node head_creat()   //头插法建立单链表
{
	node head = (struct Lnode *)malloc(sizeof(struct Lnode));
	head->next = NULL;
	node p;
	int temp;
	while (cin >> temp)
	{
		p = (node)malloc(sizeof(struct Lnode));
		p->data = temp;
		p->next = head->next;
		head->next=p;
	}
	return head;
}
bool search(node h, int target)     //查找某元素是否在链表中
{
	int flag = 0;
	node p = h->next;
	if (h->next == NULL)
		return false;
	for (; p != NULL;)
	{
		if (p->data == target)
		{
			flag = 1;
			break;
		}
		else
			p++;
	}
	if (flag)
		return true;
	else
		return false;
}
node back_creat()   //尾插法建立单链表
{
	node head = (struct Lnode *)malloc(sizeof(struct Lnode));
	head->next = NULL;
	node p;
	node r = head;
	int temp;
	while (cin >> temp)
	{
		p = (node)malloc(sizeof(struct Lnode));
		p->data = temp;
		r->next=p;
		r = p;
	}
	r->next = NULL;
	return head;
}
void print(node h)    //打印单链表
{

	node p = h->next;
	while (p)
	{
		cout << p->data << endl;
		p = p->next;
	}
}
node delete_node(node h,int del_val)     //删除指定值的节点
{
	node p = h->next;
	node q = h;
	node r=NULL;
	while (p)
	{
		if (p->data == del_val)
		{
			r = p;
			p = p->next;
			q->next = p;
			free(r);
		}
		else
		{
			q = p;
			p = p->next;
		}
	}
	return h;
}
node sort(node h)     //对链表进行排序(降序)
{
	node p=h->next;
	if (p->next == NULL)
		return h;
	
	for (; p != NULL; p = p->next)
	{
		for (node q = p->next; q != NULL; q = q->next)
		{
			int temp;
			if (p->data > q->data)
			{
				temp = p->data;
				p->data = q->data;
				q->data = temp;
			}
		}
	}
		return h;
}
node reverse(node h)  //逆置链表
{
	node p, q;
	p = h->next;
	h->next = NULL;
	while (p)
	{
		q = p;
		p = p->next;
		q->next = h->next;
		h->next = q;
	}
	return h;
}
void destroy_List(node head)  //销毁链表
{
	if (NULL == head)
	{
		return;
	}
	if (NULL == head->next)
	{
		free(head);
		head = NULL;
		return;
	}
	node p = head->next;
	while (NULL != p)
	{
		node tmp = p;
		p = p->next;
		free(tmp);
	}
	free(head);
	head = NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
	cout << "---------------构造链表-------------" << endl;
	node h = back_creat();
	cout << "---------------打印链表-------------" << endl;
	print(h);
	//cout << "-----------删除指定值后打印链表-----" << endl;
	//h = delete_node(h, 2);
	//print(h);
	cout << "-----------排序后打印链表------------" << endl;
	h = sort(h);
	print(h);
	cout << "-----------逆置后打印链表------------" << endl;
	h = reverse(h);
	print(h);
	destroy_List(h);
	return 0;
}


运行结果:

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