单链表操作实例程序

#include <iostream>
#include <iomanip>
using namespace std;

typedef struct node
{
	int val;
	node *next;
}node;
node * create_list();
void traverse_list(node *pHead);
int  get_len_list(node *pHead);
bool delete_list(node *pHead,int pos,int &val);
bool insert_list(node *pHead,int pos,int val);
void sort_list(node *pHead);
void reverse_list(node *PHead);
void main()
{
	node *pHead = create_list();
    int len = get_len_list(pHead);
	cout<<"list length:"<<len<<endl;
	traverse_list(pHead);
	int val;
	delete_list(pHead,6,val);
	cout<<"被删除的值为:"<<val<<endl;
	traverse_list(pHead);
	insert_list(pHead,3,9);
	insert_list(pHead,1,7);
	traverse_list(pHead);
	sort_list(pHead);
	traverse_list(pHead);
	reverse_list(pHead);
	traverse_list(pHead);
}

node * create_list()
{
	int len = 6,i;
	node *pHead = new node,*pTail,*pNew;
// 	cout<<"请输入创建链表的节点数:";
// 	cin>>len;
	pTail = pHead;
	pHead->next = NULL;
	for (i=0;i<len;i++)
	{
		//cout<<"输入第"<<setw(2)<<i<<"节点的值:";
		pNew = new node;
		//cin>>pNew->val;
		pNew->val = i+1;
		pTail->next = pNew;
		pTail = pNew;
	}
	pTail->next = NULL;
	return pHead;
}

void traverse_list(node *pHead)
{
	node *p = pHead->next;
	while (p)
	{
		cout<<p->val<<" ";
		p = p->next;
	}
	cout<<endl;
}

//取得节点个数,不包括头节点
int  get_len_list(node *pHead)
{
	node *p = pHead->next; //指向第一个节点
	int len = 0;
	while(p)
	{
		++len;
		p = p->next;
	}
	return len;
}
//删除第pos个节点,pos从首节点开始计数
bool delete_list(node *pHead,int pos,int &val)
{
	node *p = pHead;
	int i = 1;
	while (NULL != p->next && i < pos) //找到删除节点之前的一个节点
	{
		p = p->next;
		i++;
	}
	if (i > pos || NULL == p->next)//
	{
		return false;
	}
	node * q = p->next;
	val = q->val;
	p->next = q->next;
	delete q;
    return true;
}
bool insert_list(node *pHead,int pos,int val)
{
	node *p = pHead;
	int i = 1;
	while(NULL != p->next && i < pos)
	{
		++i;
		p = p->next;
	}
	if (i > pos /*|| NULL ==  p->next*/)
	{
		return false;
	}
	node *pNew = new node;
	pNew->val = val;
	pNew->next = p->next;
	p->next = pNew;
	return true;
}
//升序排序
void sort_list(node *pHead)
{
     node *p = pHead->next,*q;
	 int tmp;
	 while (p)
	 {
		 q= p->next;
		 while(q)
		 {
			 if (p->val > q->val)
			 {
				 tmp = p->val;
				 p->val = q->val;
				 q->val = tmp;
			 }
			 q= q->next;
		 }
		 p = p->next;
	 }
}

void reverse_list(node *pHead)
{
	node *p = pHead,*q1,*q2,*q3,*tempq1;
	q1 = pHead->next;
	tempq1 = q1;
	q2 = q1->next;
	while (q2)
	{
		q3 = q2->next;
		q2->next = q1;
		q1 = q2;
		q2 = q3;
	}
	pHead->next = q1;
	tempq1->next = NULL;
}

单链表操作实例程序

时间: 2024-10-13 10:43:09

单链表操作实例程序的相关文章

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

单链表操作

#include<stdio.h>#include<malloc.h> typedef struct Node{ int data; struct Node *next;}LinkList; //就地反转int LinkListRerverse(LinkList *head){ LinkList *q,*p; p = head->next; head->next = NULL; while(p != NULL){ q = p->next; p->next =

单链表操作系列

#include<stdio.h> #include<stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //单链表的建立1,头插法建立单链表,逆序生成 LinkList LinkListCreateH() { LinkList L,p; L = (LinkList)malloc(sizeof(LNode)

数据结构之 线性表---单链表操作A (删除链表中的指定元素)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

10、单链表操作

单链表操作 单链表操作1 /*单链表的类型定义*/ typedef int DataType; typedef struct node { DataType data; struct node * next; }LinkNode, *LinkList; /*单链表的定位运算*/ LinkNode *Locate(LinkNode *L, int k)//????为什么此处是LinkNode *Locate()类型,表示什么意思 { LinkNode *p; int i; i= 1; p = L-

循环单链表操作(转)

循环单链表的初始化,建立,插入,查找,删除. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 //////////////////////////////////////////////// //循环单链表的初始化,建立,插入,查找,删除.// //Autho

单链表操作问题,主要是逆操作

工作无事,搞其它事也不太方便,写点简单代码.本来想写的高大上一些,发现用范型不是一点代码的事,还是算了. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct list { int val; struct list *next; }Node_def; #define NODE_SIZE (sizeof(Node_def)) #undef T #define T Node_def

数据结构之---c语言实现循环单链表操作

//=========杨鑫========================// //循环单链表的实现 #include <stdio.h> #include <stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }Node,*LinkedList; int count = 0; //1.单循环链表的初始化 LinkedList init_ci

单链表操作(数据结构实验一)

 实验内容 1 初始化一个带表头结点的单链表. 2 从表头不断插入结点建立一个带表头结点的单链表.设表中元素的类型为整型,元素值从键盘输入. 3 从表尾不断插入结点建立一个带表头结点的单链表.设表中元素的类型为整型,元素值从键盘输入. 4 打印一个带表头结点的单链表. 5 清空一个带表头结点的单链表. 代码:(只是把各个函数写好,并给出了调用数据,其他根据实验要求改就行了) #include<stdio.h> #include<stdlib.h> #include<mallo