/*
* 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;
}
}
分享到:
相关推荐
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针或引用连接在一起,形成一个逻辑上的线性序列。单向链表的每个节点包含两部分...
单向链表类模板的基本结构通常包括以下几个部分: 1. **节点定义**:首先,我们需要定义一个节点结构体(或类),它包含一个数据成员和一个指向下一个节点的指针。例如: ```cpp template struct ListNode { T...
2. 学习并实现单向链表的基本操作,包括插入和删除元素。插入操作是在指定位置插入新节点,删除操作则是找到特定元素并移除对应的节点。 实验内容包括以下部分: 1. 创建带头结点的单向链表:随机生成或通过键盘...
单向链表是一种基本的数据结构,它在计算机科学中被广泛应用,特别是在算法和数据结构的实现中。在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨...
在编程领域,数据结构是构建复杂程序的基础,而链表作为一种基本的数据结构,被广泛应用于各种软件系统中。本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么...
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来。每个链表节点包含两部分:数据域,用于存储实际的元素值;指针域,...
双向链表的操作比单向链表更灵活,但也因此在内存管理和操作上稍显复杂。 - **创建链表**:与单向链表相同,从头节点开始,但每个节点需要额外存储指向前一个节点的指针。 - **插入节点**:在双向链表中插入节点...
单向链表的主要操作包括插入、删除和遍历。插入操作通常在链表的头部或尾部进行,而删除操作则需要找到目标节点并更新其前一个节点的指针。遍历链表通常从头节点开始,直到达到尾节点。 双向链表相较于单向链表,...
单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。在C++或类似编程语言中,处理链表时常常使用指向指针的指针(也称为二级指针),这是因为链表中的元素不是连续...
单向链表是一种基本的数据结构,它在计算机科学和编程,特别是C#中扮演着重要角色。单向链表与数组不同,不提供随机访问,但允许高效地插入和删除元素,尤其在列表的中间或末尾。接下来,我们将深入探讨C#中单向链表...
单向链表的基本操作包括插入、删除和遍历。 1. **结构定义**: 在C语言中,我们通常定义一个结构体来表示链表节点。例如: ```c typedef struct Node { int data; struct Node* next; } Node; ``` 这里的`...
在IT领域,数据结构是编程基础中的重要组成部分,而单向链表作为基本的数据结构之一,在许多场景下都有着广泛的应用。本项目以Flash AS3.0为编程语言,实现了一个单向链表的数据结构,这对于理解和应用单向链表概念...
该队列的主要特点是其内部数据结构采用了一个单向链表,并且实现了 BlockingQueue 接口,提供了线程安全的插入、删除和获取元素的操作。 单向链表是一种简单的数据结构,由一系列节点组成,每个节点包含数据以及...
单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本文中,我们将深入探讨如何实现单向链表的各种操作,包括建立链表、添加元素、删除元素、翻转链表(包括递归方法)...
本文将详细介绍如何在C#中实现一个基本的单向链表,并探讨其核心概念和基本操作。 #### 二、节点定义 在单向链表中,节点是构成链表的基本单元。每个节点通常包括以下部分: 1. **值**: 存储的数据。 2. **下一个...
本文详细介绍了使用C语言实现带头结点的单向链表的基本操作,包括链表的创建、输出、插入元素和删除元素,以及单向链表的逆序连接和两个有序线性表的归并。 一、链表的创建 链表的创建是指在内存中分配一个结点,...
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。单向链表不同于双向链表,因为它每个节点只包含指向下一个节点的指针,而不是同时包含前一个节点的指针。这样的设计使得插入和删除操作相对...
单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在计算机科学中,链表常用于构建动态数据结构,因为它们允许高效的插入和删除操作,尤其是在元素的位置未知时。而基...
单向链表是一种基本的数据结构,它在计算机...总结,单向链表是数据结构的基础,理解和掌握其原理和操作方法对于提升编程能力至关重要。通过深入学习和实践,可以灵活运用链表解决实际问题,提高程序的效率和灵活性。
本主题聚焦于使用C#语言通过泛型来实现一个单向链表。链表是一种非连续、非顺序存储的数据结构,由一系列节点(也称为元素或记录)组成,每个节点包含数据和指向下一个节点的引用。在C#中,泛型提供了一种方式,可以...