`
忧里修斯
  • 浏览: 437117 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

单向链表基本操作

F# 
阅读更多
/*
 * link.c
 */
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student {
	long num;
	float score;
	struct student *next;
};

//节点数
int n;
int main(int argc, char *argv[]) {
	//声明函数
	struct student *create(void);
	void print(struct student *head);
	struct student *del(struct student *head,long num);
	struct student *insert(struct student *head,struct student *stu);

	struct student *new,*afterDel,*afterInsert;
	long delnum = 0;

	printf("Enter nodes end by 0,0 \n");
	new = create();
	printf("After Create ");
	print(new);
	printf("Enter del num:");
	scanf("%ld",&delnum);
	printf("Del node ");
	afterDel = del(new,delnum);
	printf("After Del ");
	print(afterDel);
	struct student *newStu;
	newStu = (struct student *) malloc(LEN);
	scanf("%ld,%f", &newStu->num, &newStu->score);
	afterInsert = insert(afterDel,newStu);
	printf("After Insert ");
	print(afterInsert);
	exit(0);

}
/**
 *功能:创建动态链表。思路为,p1开辟新节点,p2指向链表最后中的最后一个节点
 *返回值:新链表的头指针
 */
struct student *create(void) {

	struct student *head, *p1, *p2;
	n = 0;
	//开辟新空间,并将(void *)强制转换成(struct student *)
	p1 = p2 = (struct student *) malloc(LEN);
	scanf("%ld,%f", &p1->num, &p1->score);
	head = NULL;
	while (p1->num != 0) {

		n = n + 1;
		if (n == 1)
			head = p1;
		else
			p2->next = p1;
		p2 = p1;
		p1 = (struct student *) malloc(LEN);
		scanf("%ld,%f", &p1->num, &p1->score);
	}
	p2->next = NULL;
	return head;

}

/**
 *功能:输出链表内容
 */
void print(struct student *head) {

	struct student *p;
	printf("The dynamiclink has %d nodes:\n", n);
	p = head;
	if (head != NULL) {
		do {
			printf("%ld %5.1f\n", p->num, p->score);
			p = p->next;
		} while (p != NULL);
	}
}

/**
 * 功能:删除节点
 */
struct student *del(struct student *head,long num){

	struct student *p1,*p2;
	if(head == NULL){
		printf("The link is null!\n");
		return head;
	}
	p1 = head;
	while(num != p1->num && p1->next != NULL){
		p2 = p1;
		p1 = p1->next;
	}
	if(num == p1->num){
		//只有一个节点
		if(p1 == head){
			head = p1->next;
		}else{
			p2->next = p1->next;
		}
		printf("delete:%ld\n",num);
		n = n - 1;
	}else{
		printf("%ld not be found\n",num);
	}
	return head;
}

/**
 * 功能:插入新节点,实现简单的按num升序排序的链表中插入,并保证结果为升序
 */
struct student *insert(struct student *head,struct student *stu){

	struct student *p,*p1,*p2;
	p1 = head;
	p2 = stu;
	//链表为空
	if(head == NULL){
		head = p2;
		p2->next = NULL;
	}else{
		//寻找待插节点位置
		while((p2->num > p1->num) && (p1->next != NULL)){
			p = p1;
			p1 = p1->next;
		}
		//
		if(p2->num <= p1->num){
			//只有一个节点,则插入该节点之前
			if(head == p1){
				//插入第一个节点之前
				head = p2;
			}else{
				//插到p所指节点之后
				p->next = p2;
			}
			p2->next = p1;
		}else{
			//插入到最后节点之后
			p1->next = p2;
			p2->next = NULL;
		}
		n = n + 1;
		return head;
	}
}
分享到:
评论

相关推荐

    单向链表 代码架构

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针或引用连接在一起,形成一个逻辑上的线性序列。单向链表的每个节点包含两部分...

    单向链表类模板_单向链表类模板_fastchq_

    单向链表类模板的基本结构通常包括以下几个部分: 1. **节点定义**:首先,我们需要定义一个节点结构体(或类),它包含一个数据成员和一个指向下一个节点的指针。例如: ```cpp template struct ListNode { T...

    单向链表实验报告(数据结构)

    2. 学习并实现单向链表的基本操作,包括插入和删除元素。插入操作是在指定位置插入新节点,删除操作则是找到特定元素并移除对应的节点。 实验内容包括以下部分: 1. 创建带头结点的单向链表:随机生成或通过键盘...

    单向链表源代码

    单向链表是一种基本的数据结构,它在计算机科学中被广泛应用,特别是在算法和数据结构的实现中。在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨...

    C#单向链表的实现

    在编程领域,数据结构是构建复杂程序的基础,而链表作为一种基本的数据结构,被广泛应用于各种软件系统中。本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么...

    单向链表的操作____

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来。每个链表节点包含两部分:数据域,用于存储实际的元素值;指针域,...

    C语言自学链表,单向链表,双向链表,适合新手学习。

    双向链表的操作比单向链表更灵活,但也因此在内存管理和操作上稍显复杂。 - **创建链表**:与单向链表相同,从头节点开始,但每个节点需要额外存储指向前一个节点的指针。 - **插入节点**:在双向链表中插入节点...

    数据结构 单向链表 双向链表 源程序

    单向链表的主要操作包括插入、删除和遍历。插入操作通常在链表的头部或尾部进行,而删除操作则需要找到目标节点并更新其前一个节点的指针。遍历链表通常从头节点开始,直到达到尾节点。 双向链表相较于单向链表,...

    单向链表 操作 经典

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。在C++或类似编程语言中,处理链表时常常使用指向指针的指针(也称为二级指针),这是因为链表中的元素不是连续...

    C#单向链表C#单向链表C#单向链表

    单向链表是一种基本的数据结构,它在计算机科学和编程,特别是C#中扮演着重要角色。单向链表与数组不同,不提供随机访问,但允许高效地插入和删除元素,尤其在列表的中间或末尾。接下来,我们将深入探讨C#中单向链表...

    C语言实现的单向链表和双向链表

    单向链表的基本操作包括插入、删除和遍历。 1. **结构定义**: 在C语言中,我们通常定义一个结构体来表示链表节点。例如: ```c typedef struct Node { int data; struct Node* next; } Node; ``` 这里的`...

    flash as3.0 实现的单向链表

    在IT领域,数据结构是编程基础中的重要组成部分,而单向链表作为基本的数据结构之一,在许多场景下都有着广泛的应用。本项目以Flash AS3.0为编程语言,实现了一个单向链表的数据结构,这对于理解和应用单向链表概念...

    LinkedBlockingQueue + 单向链表基本结构

    该队列的主要特点是其内部数据结构采用了一个单向链表,并且实现了 BlockingQueue 接口,提供了线程安全的插入、删除和获取元素的操作。 单向链表是一种简单的数据结构,由一系列节点组成,每个节点包含数据以及...

    单向链表多种功能实现

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本文中,我们将深入探讨如何实现单向链表的各种操作,包括建立链表、添加元素、删除元素、翻转链表(包括递归方法)...

    C#实现单向链表C# .net 链表 单向链表

    本文将详细介绍如何在C#中实现一个基本的单向链表,并探讨其核心概念和基本操作。 #### 二、节点定义 在单向链表中,节点是构成链表的基本单元。每个节点通常包括以下部分: 1. **值**: 存储的数据。 2. **下一个...

    C语言实现带头结点的单向链表的基本操作

    本文详细介绍了使用C语言实现带头结点的单向链表的基本操作,包括链表的创建、输出、插入元素和删除元素,以及单向链表的逆序连接和两个有序线性表的归并。 一、链表的创建 链表的创建是指在内存中分配一个结点,...

    单向链表的基本操作C语言

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。单向链表不同于双向链表,因为它每个节点只包含指向下一个节点的指针,而不是同时包含前一个节点的指针。这样的设计使得插入和删除操作相对...

    单向链表实现基排序

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在计算机科学中,链表常用于构建动态数据结构,因为它们允许高效的插入和删除操作,尤其是在元素的位置未知时。而基...

    单向链表实现

    单向链表是一种基本的数据结构,它在计算机...总结,单向链表是数据结构的基础,理解和掌握其原理和操作方法对于提升编程能力至关重要。通过深入学习和实践,可以灵活运用链表解决实际问题,提高程序的效率和灵活性。

    C#泛型实现单向链表实现

    本主题聚焦于使用C#语言通过泛型来实现一个单向链表。链表是一种非连续、非顺序存储的数据结构,由一系列节点(也称为元素或记录)组成,每个节点包含数据和指向下一个节点的引用。在C#中,泛型提供了一种方式,可以...

Global site tag (gtag.js) - Google Analytics