数据结构之链表

数据结构。之。链表的实现。

基础篇;

链表的建立和输出:

#include <stdio.h>
//顺序表的定义:
#define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
typedef struct
{    DataType data[ListSize];    //向量data用于存放表结点
    int length;                //当前的表长度
}SeqList;

void main()
{
    SeqList L;
    int n=5,i,x;                //欲建立的顺序表长度
    L.length=0;
    void CreateList(SeqList *L,int n);
    void PrintList(SeqList L,int n);
    int LocateList(SeqList L,DataType x);
    CreateList(&L,n);        //建立顺序表
    PrintList(L,n);            //打印顺序表

}

//顺序表的建立:
void CreateList(SeqList *L,int n)
{    int i;
    for (i=0;i<n;i++)
        scanf("%d",&(*L).data[i]);
//    printf("%d  

",(*L).data[i]);
    (*L).length=n;
/*    for (i=0;i<n;i++)
        printf("%d  ",L.data[i]);*/
}

//顺序表的打印:
void PrintList(SeqList L,int n)
{    int i;
    for (i=0;i<n;i++)
        printf("%d  ",L.data[i]);
    printf("%d  ",i);
    printf("
");
}
View Code

链表的查找:

#include <stdio.h>
#include <stdlib.h>
//顺序表的定义:
#define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
typedef struct
{    DataType data[ListSize];    //向量data用于存放表结点
    int length;                //当前的表长度
}SeqList;

void main()
{
    int LocateList(SeqList L,DataType x);
    void PrintList(SeqList L,int n);
    SeqList L;
    int i,n=10,x;
    for (i=0;i<n;i++)//随机取值
        L.data[i]=rand()%100;
    L.length=n;
    PrintList(L,n);            //打印顺序表
    printf("输入要查找的值:");
    scanf("%d",&x);
    i=LocateList(L,x);        //顺序表查找
    if (i==0)
        printf("未找到%d!
",x);
    else
        printf("找到%d,在第%d个位置上!
",x,i);
}

//顺序表的查找:
int LocateList(SeqList L,DataType x)
{    int i=0;
    while (i<L.length && L.data[i]!=x)   
        ++i;
    if (i<L.length) return i+1;
    else return 0;
}

//顺序表的打印:
void PrintList(SeqList L,int n)
{    int i;
    for (i=0;i<n;i++)
        printf("%d  ",L.data[i]);
    printf("
");
}
View Code

链表的插入:

#include <stdio.h>
#include <stdlib.h>
//顺序表的定义:
#define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
typedef struct
{    DataType data[ListSize];    //向量data用于存放表结点
    int length;                //当前的表长度
}SeqList;

void main()
{
    void InsertList(SeqList *L,DataType x,int i);
    void PrintList(SeqList L,int n);
    SeqList L;
    int i,n=10;
    DataType x;
    for (i=0;i<n;i++)
        L.data[i]=rand()%100;
    L.length=n;
    PrintList(L,n);            //打印顺序表
    printf("输入要插入的位置:");
    scanf("%d",&i);
    printf("输入要插入的元素:");
    scanf("%d",&x);
    InsertList(&L,x,i);        //顺序表插入
    PrintList(L,n);            //打印顺序表
}

//顺序表的插入:
void InsertList(SeqList *L,DataType x,int i)
{//将新结点x插入L所指的顺序表的第i个结点的位置上
    int j;
    if (i<1 || i>(*L).length+1)
    {
        printf("插入位置非法");
        exit(0);
    }
    if ((*L).length>=ListSize)
    {
        printf("表空间溢出,退出运行");
        exit(0);
    }
    for (j=(*L).length-1;j>=i-1;j--)
        (*L).data[j+1]=(*L).data[j];
    (*L).data[i-1]=x;
    (*L).length++;
}

//顺序表的打印:
void PrintList(SeqList L,int n)
{    int i;
    for (i=0;i<L.length;i++)
        printf("%d  ",L.data[i]);
    printf("
");
}
View Code

链表的删除:

#include <stdio.h>
#include <stdlib.h>
//顺序表的定义:
#define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
typedef struct
{    DataType data[ListSize];    //向量data用于存放表结点
    int length;                //当前的表长度
}SeqList;

void main()
{
    void DeleteList(SeqList *L,int i);
    void PrintList(SeqList L,int n);
    SeqList L;
    int i,n=10;
    for (i=0;i<n;i++)
        L.data[i]=rand()%100;
    L.length=n;
    PrintList(L,n);            //打印顺序表
    printf("输入要删除的位置:");
    scanf("%d",&i);
    DeleteList(&L,i);        //顺序表删除
    PrintList(L,n);            //打印顺序表
}

//顺序表的删除:
void DeleteList(SeqList *L,int i)
{//从L所指的顺序表中删除第i个结点
    int j;
    if (i<1 || i>(*L).length)
    {
        printf("删除位置非法");
        exit(0);
    }
    for (j=i;j<=(*L).length-1;j++)
        (*L).data[j-1]=(*L).data[j];
    (*L).length--;
}

//顺序表的打印:
void PrintList(SeqList L,int n)
{    int i;
    for (i=0;i<L.length;i++)
        printf("%d  ",L.data[i]);
    printf("
");
}
View Code

然后,是大集合,把之前的都合到一起;

#include <stdio.h>
#include <stdlib.h>

//顺序表的定义:
#define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
typedef struct
{    DataType data[ListSize];    //向量data用于存放表结点
    int length;                //当前的表长度
}SeqList;

//顺序表的建立:
void CreateList(SeqList *L,int n)
{    
    int i;
    printf("输入数据:
");
    for (i=0;i<n;i++)
        scanf("%d",&(*L).data[i]);
//    printf("%d  

",(*L).data[i]);
    (*L).length=n;
/*    for (i=0;i<n;i++)
        printf("%d  ",L.data[i]);*/
}

//顺序表的打印:
void PrintList(SeqList L,int n)
{    int i;
    for (i=0;i<n;i++)
        printf("%d  ",L.data[i]);
    printf("
");
    printf("链表长度是:%d
",i);
}
//顺序表的查找:
int LocateList(SeqList L,DataType x)
{    int    i=0;
    while (i<L.length && L.data[i]!=x)   
        ++i;
    if (i<L.length) return i+1;
    else return 0;
}

//顺序表的插入:
void InsertList(SeqList *L,DataType x,int i)
{//将新结点x插入L所指的顺序表的第i个结点的位置上
    int j;
    if (i<1 || i>(*L).length+1)
    {
        printf("插入位置非法");
        exit(0);
    }
    if ((*L).length>=ListSize)
    {
        printf("表空间溢出,退出运行");
        exit(0);
    }
    for (j=(*L).length-1;j>=i-1;j--)
        (*L).data[j+1]=(*L).data[j];
    (*L).data[i-1]=x;
    (*L).length++;
}

//顺序表的删除:
void DeleteList(SeqList *L,int i)
{//从L所指的顺序表中删除第i个结点
    int j;
    if (i<1 || i>(*L).length)
    {
        printf("删除位置非法");
        exit(0);
    }
    for (j=i;j<=(*L).length-1;j++)
        (*L).data[j-1]=(*L).data[j];
    (*L).length--;
}

void main()
{
    SeqList L;
    int i,x;
    int n;    //欲建立的顺序表长度
    printf("欲建立的顺序表长度:");
    scanf("%d",&n);
    L.length=0;
    CreateList(&L,n);        //建立顺序表
    PrintList(L,n);            //打印顺序表
    printf("输入要查找的值:");
    scanf("%d",&x);
    i=LocateList(L,x);        //顺序表查找
    if (i==0)
        printf("未找到%d!
",x);
    else
        printf("找到%d,在第%d个位置上!
",x,i);
    printf("输入要插入的位置:");
    scanf("%d",&i);
    printf("输入要插入的元素:");
    scanf("%d",&x);
    InsertList(&L,x,i);        //顺序表插入
    PrintList(L,n+1);            //打印顺序表
     printf("输入要删除的位置:");
    scanf("%d",&i);
    DeleteList(&L,i);        //顺序表删除
    PrintList(L,n);            //打印顺序表
}

适合初学者理解和研究;

原文地址:https://www.cnblogs.com/yuyixingkong/p/3321619.html