链表基本操作集合

链表基本操作集合

//List code by Denis

#include <stdio.h>
#include <malloc.h>
#define ture 1
#define false 0

typedef int ElemType;
typedef struct list{
	ElemType data;
	struct list *next;
}LNode;

//Create a list,nLength is the length of the line list
LNode *Create(int nLength)
{
	int i;
	LNode *Ln_Head,*Ln_tmp1,*Ln_tmp2;
	Ln_Head = (LNode *)malloc(sizeof(LNode));
	Ln_tmp1 = Ln_Head;   /*Save the Head pointor*/
	printf("Input %d data\n",nLength);
	for(i=0;i<nLength;i++)
	{
		Ln_tmp2 = (LNode *)malloc(sizeof(LNode));
		scanf("%d",&Ln_tmp2->data);//Input the data

		//Insert the data to the end odf list
		Ln_tmp1->next = Ln_tmp2;
		Ln_tmp1 = Ln_tmp2;
		Ln_tmp2->next = NULL;

	}
	return Ln_Head;
}

void ShowList(LNode *Head)
{
	LNode *P= Head->next;
	printf("The list is:\n");
	while(P)
	{
		printf("%d ",P->data);
		P = P->next;
	}
	printf("\n");

}

//Get the length of the List
int ListLength(LNode *Head)
{
	int length=0;
	LNode *P;
	P = Head->next;
	while(P)
	{
		length++;
		P = P->next;
	}

	return length;
}

//Get the number i data that in the list to the e parameter
//i must be >0,and <= List's length
ElemType GetElem(LNode *Head, int i, ElemType e)
{
	int j=0;
	LNode *P, *tmp;
	P = Head->next;
	while(P && j!=i)
	{
		tmp = P;//Save the P
		P = P->next;
		j++;
	}
	return tmp->data;
}

//verify whether E is the one of list
//if return value==1,E is in the list
int LocateElem(LNode *Head, ElemType E)
{
	LNode *P;
	P = Head->next;
	while(P)
	{
		if(P->data == E)//,E is in the list
			return ture;
		else
			P = P->next;
	}
	return false;
}

//Insert E to the list' tail
int ListInsert(LNode *Head, int ListLength, ElemType E)
{
	LNode *P, *Tail;
	P = Head->next;
	//Get the tail pointor of the list
	while(P->next)
	{
		P = P->next;
	}
	Tail = P;
	P = (LNode *)malloc(sizeof(LNode));
	P->data = E;
	Tail->next = P;
	P->next = NULL;
	//ListLength++;
}

LNode *Union(LNode *Head1, LNode *Head2)
{

	int L1_len = ListLength(Head1);
	int L2_len = ListLength(Head2);
	ElemType E=Head2->next->data;
	int i=1;
	printf("Union list_1 and list_2\n");
	for(i=1; i<=L2_len; i++)
	{
		E=GetElem(Head2,i,E);
			if(!LocateElem(Head1,E))
				ListInsert(Head1,++L1_len, E);
	}

	return Head1;
}

void main()
{
	LNode *Create(int nLength);
	void ShowList(LNode *Head);

	LNode *Head1,*Head2;
	int nLength;
	int equal = 0;
	int Verify_eq;
	ElemType Elem_E=0;

	Head1 = Create(4);//Create the first list that has 4 data
	ShowList(Head1);

	Head2 = Create(4);//Create the second list that has 4 data
	ShowList(Head2);
	//nLength = ListLength(Head2);//Get the length of the list

	Elem_E = GetElem(Head1, 2,Elem_E);
	Verify_eq = LocateElem(Head1, 5);
	//debug insert function
	//ListInsert(Head1,nLength,10000);
	Head1 = Union(Head1,Head2);
	ShowList(Head1);

	getch();

}



时间: 2024-09-29 20:36:18

链表基本操作集合的相关文章

Java链表基本操作和Java.util.ArrayList

Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题"从尾到头打印链表",具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 一开始我想的是通过两次遍历链表,第一次遍历得到链表元素的个数count.然后定义一个ArrayList 变量,由于ArrayList是动态数组,不能在未初始化的情况下对任意位置进行插入指定的值.所以只能先对其进行初始化,将count个ArrayList元素赋值为初始值0

数据结构实验报告-实验一 顺序表、单链表基本操作的实现

实验一    顺序表.单链表基本操作的实现   l  实验目的 1.顺序表 (1)掌握线性表的基本运算. (2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作. (3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力. l  实验内容 1. 顺序表 1.编写线性表基本操作函数: (1)InitList(LIST *L,int ms)初始化线性表: (2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插入元素: (3)DeleteList1

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

用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: [cpp] view plaincopy #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct Lnode { int data; struct 

链表基本操作的实现(转)

链表基本操作的实现 1 #include <stdio.h> 2 #include <malloc.h> 3 #define LEN sizeof(struct student) 4 5 /*----------------数据定义----------------------*/ 6 7 //定义一个学生信息的结构体,包括学号,姓名和结构体类型的指针 8 struct student 9 { 10 long num; //学号 11 char name[128]; //姓名 12

数据结构学习之单链表基本操作

数据结构学习之单链表基本操作 0x1 前言 今天实验课,学习了下单链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的单链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)释

数据结构学习之双链表基本操作

数据结构学习之双链表基本操作 0x1 前言 今天实验课,学习了下双链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的双链链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)

数据结构复习--java实现单链表基本操作

单链表的基本操作包括建立单链表.查找运算(按序查找和按值查找).插入运算(前插和后插)和删除运算.下面给出具体的java实现程序: package com.zpp.test; //首先创建一个节点类 public class Node { private Node next; //指针域 private int data;//数据域 public Node( int data) { this. data = data; } } package com.zpp.test; public class

利用线性链表基本操作完成两个有序线性表的合并

La.Lb线性链表升序排列,将结果放在Lc链表里.之前有文章写过两个有序链表的合并 区别在于,前面的做法是保留La的头节点,free掉Lb的头节点,将余下节点串起来.这种方法是面向过程编程 而现在讨论的做法,是单独建立一个Lc链表,利用一些已经写好的基本操作函数来完成,这种模块化编程做法实际上还简单些.不光模块函数里写不了几行,在调用这些函数时减少了不必要的琐碎过程的思考时间. 该做法的核心思想:将每轮比较过后偏小的那个节点从相应链表中删除(这是头节点的指针不会指向该节点了,但该节点的空间依旧保

链表 基本操作

实验目的 1. 定义单链表的结点类型. 2. 熟悉对单链表的一些基本操作和具体的函数定义. 3. 通过单链表的定义掌握线性表的链式存储结构的特点. 4. 掌握循环链表和双链表的定义和构造方法. 实验内容 该程序的功能是实现单链表的定义和操作.该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数.程序中的单链表(带头结点)结点为结构类型,结点值为整型. /* 定义DataType为int类型 */ typedef int DataType; /* 单链表的结点类型 */ typedef