链表概述

  链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:

一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。



  链表的各类操作包括:学习单向链表的创建、删除、 插入(无序、有序)、输出、 排序(选择、插入、冒泡)、反序等等。

基本操作

1. 节点的构造

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#defineLEN sizeof(struct stu)structstu{

//数据char num[10];char name[20];float score;

//指针structstu*next;};

2. 建立链表

struct stu *create(){

/structstu*head;structstu*p1, *p2;

head = (struct stu *)malloc(LEN); head->next =NULL;

p1 = head;

p2 = (struct stu *)malloc(LEN);

printf("输入个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar();

while(strcmp(p2->num,"0") !=0){/*

执行结束后



1。p2的next域为NULL.

2。第一个节点的next域指向第二个节点的数据域

3。p1指针指向第二个节点的数据域

p2->next = p1->next; p1->next = p2; p1 = p2;

p2 = (struct stu *)malloc(LEN);printf("输入个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar(); }

free(p2);returnhead;};

3. 输出链表

void print(struct stu * head){structstu*p;

printf("num name score\n"); p = head->next;

while(p!=NULL){

printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);

p=p->next; }}

4. 插入节点



void insert(struct stu * head, struct stu * p0)

{ struct stu *p1, *p2; p1 = head->next;p2 = head;

while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))

{p2=p1; p1=p1->next; } p0->next = p2->next; p2->next = p0;}

5. 删除节点

int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;

while(p1!=NULL&&strcmp(num, p1->num)!=0)

{ p2=p1; p1=p1->next; }

if(!p1){return0; }

p2->next = p1->next;free(p1);return1;}

6. 主函数



//主函数int main()

{structstu*h, *p0;charnum[10];printf("建立链表\n");

h = create(); p0 = (struct stu *)malloc(LEN);

printf("输入待插入的个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p0->num, p0->name, &p0->score);

getchar();if(strcmp(p0->num,"0") !=0){ insert(h, p0); }

printf("输入待删除个人信息的学号\n");

scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);

}printf("输出链表\n"); print(h);return0;}