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

 实验内容

1 初始化一个带表头结点的单链表。

2 从表头不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。

3 从表尾不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。

4 打印一个带表头结点的单链表。

5 清空一个带表头结点的单链表。

代码:(只是把各个函数写好,并给出了调用数据,其他根据实验要求改就行了)

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define M 100
typedef int Etype; //定义单链表结点值的类型为整型

typedef struct Node
{
    Etype data;              //单链表中的数据域
    struct Node *link;          //单链表的指针域
}Node;
typedef Node *List;      //定义单链表

List BuildList1();
List BuildList2();
void PrintList(List first);
void clear(List *first);
//头插法建立链表
List BuildList1()
{
    Node *L;
    Etype x,n;
    L = (Node *)malloc(sizeof(Node));   //申请头结点空间
    L->link = NULL;                      //初始化一个空链表
    printf("请输入元素个数:\n");
    scanf("%d",&n);
   printf("请输入元素:\n");                  //x为链表数据域中的数据
    for(int i=0;i<n;i++)
    {
        scanf("%d",&x);
        Node *p;
        p = (Node *)malloc(sizeof(Node));   //申请新的结点
        p->data = x;                     //结点数据域赋值
        p->link = L->link;                    //将结点插入到表头L-->|2|-->|1|-->NULL
        L->link = p;
    }
    return L;
}
//尾插法建立链表
List BuildList2()
{
    Node *L,*r;
    Etype n,x;
    L = (Node *)malloc(sizeof(Node));   //申请头结点空间
    L->link = NULL;                  //初始化一个空链表
    printf("请输入元素个数:\n");
    scanf("%d",&n);
    r = L;                          //r始终指向终端结点,开始时指向头结点
    printf("请输入元素:\n");
    for(int i=0;i<n;i++)
    {
        scanf("%d",&x);
        Node *p;
        p = (Node *)malloc(sizeof(Node));   //申请新的结点
        p->data = x;                     //结点数据域赋值
        r->link = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL
        r = p;
    }
    r->link = NULL;

    return L;
}
//输出链表
void PrintList(List first)
{
    Node *Li;
    Li=first->link;
    while(Li!=NULL)
    {
        printf("%d ",Li->data);
        Li=Li->link;
    }
    printf("\n");
}
//清空链表
void clear(List *first)
{
    Node *p=*first;
    while(*first)
    {
        p=(*first)->link;
        free(*first);
        *first=p;
    }
}
int main()
{
    Node *L;
    L=BuildList1();        //调用BuiltdList1(前插法)建立单链表算法
    PrintList(L); //打印单链表
    clear(&L);//清空单链表
    L=BuildList2();                      //调用BuiltdList2(后插法)建立单链表算法
    PrintList(L);	       //打印单链表
    clear(&L);//清空单链表
}
时间: 2024-07-29 18:29:17

单链表操作(数据结构实验一)的相关文章

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

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

数据结构之 线性表---单链表操作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)

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 <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 &v

数据结构之---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

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

工作无事,搞其它事也不太方便,写点简单代码.本来想写的高大上一些,发现用范型不是一点代码的事,还是算了. #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