温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

c#线性表中链表怎么用

发布时间:2022-01-15 14:27:54 来源:亿速云 阅读:120 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“c#线性表中链表怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“c#线性表中链表怎么用”这篇文章吧。

单链表也是一种链式存取的线性表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,以next指针指向下一个节点而链接起来,相比于顺序表,链表有着快速增加,删除节点的优势,其节点的随机访问效率较低。

头文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:LineTable.h 
 * 
 *Function:单链表相关数据定义和函数声明 
 *****************************************************************************************************/ 

#ifndef SINGLE_LIST_H 
#define SINGLE_LIST_H 

#include "global.h" 

typedef struct LNode 
{ 
    ElemType data; 
    struct LNode *next; 
}LNode,*LinkList; 

int CreateSingleList(LinkList *L,int n); 
void  PrintSingleList(LinkList L); 
int InsertSingleList(LinkList *L,int i,ElemType e); 
int DeleteSingleList(LinkList *L,int i,ElemType *e); 
int GetSingleListLength(LinkList L); 
void DestroySingleList(LinkList *L); 

#endif

源文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:SingleList.c 
 * 
 *Function:单链表基本操作 
 *****************************************************************************************************/ 

#include "../inc/SingleList.h" 

/**************************************************************************************************** 
 *Function Name:CreateSingleList 
 * 
 *Function:创建一个单链表 
 * 
 *Parameter:     L:单链表表头, 
 *                 n:单链表长度 
 * 
 *Return Value:成功返回0,失败返回-1 
 ***************************************************************************************************/ 
int CreateSingleList(LinkList *L,int n) 
{ 
    int i = 0; 
    LinkList p1,p2; 

    *L = (LinkList)malloc(sizeof(LNode)); 
    if(*L == NULL) 
    { 
        perror("malooc error\n"); 
        return -1; 
    } 
    (*L)->data = 0; 
    (*L)->next = NULL; 
    p1 = *L; 
    p2 = *L; 

    for(i=1; i<=n; i++) 
    { 
        p1 = (LinkList)malloc(sizeof(LNode)); 
        if(p1 == NULL) 
        { 
            perror("malooc error\n"); 
            return -1; 
        } 
        p1->data = i; 
        p2->next = p1; 
        p2 = p1; 
    } 

    p2->next = NULL; 
    (*L)->data = n; 

    return 0; 
} 

/**************************************************************************************************** 
 *Function Name:PrintSingleList 
 * 
 *Function:打印单链表表中的元素 
 * 
 *Parameter:     L:单链表表头 
 * 
 *Return Value:无 
 ***************************************************************************************************/ 
void  PrintSingleList(LinkList L) 
{ 
    L = L->next; 
    while(L) 
    { 
        printf("%d---",L->data); 
        L = L->next; 
    } 
    putchar('\n'); 

    return ; 
} 

/**************************************************************************************************** 
 *Function Name:InsertSingleList 
 * 
 *Function:在i位置插入一个元素e 
 * 
 *Parameter:     L:单链表表头, 
 *               i:元素位置 
 *               e:要插入的元素 
 * 
 *Return Value:成功返回0,失败返回-1 
 ***************************************************************************************************/ 
int InsertSingleList(LinkList *L,int i,ElemType e) 
{ 
    LinkList p1 = (*L)->next; 
    LinkList p2 = (*L)->next; 
    int j = 1; 

    while(p1 && j<i-1) 
    { 
        p1 = p1->next; 
        ++j; 
    } 

    if(!p1 || j>i-1) 
    { 
        perror("Insert position error,the parameter i is error!\n"); 
        return -1; 
    } 

    p2 = (LinkList)malloc(sizeof(LNode)); 
    p2->data = e; 
    p2->next = p1->next; 
    p1->next = p2; 
    (*L)->data += 1; 

    return 0; 
} 

/**************************************************************************************************** 
 *Function Name:DeleteSingleList 
 * 
 *Function:在制定位置删除单链表中的元素 
 * 
 *Parameter:     L:单链表表头, 
 *               i:元素位置 
 *               e:要插入的元素 
 * 
 *Return Value: 成功返回0,失败返回-1 
 ***************************************************************************************************/ 
int DeleteSingleList(LinkList *L,int i,ElemType *e) 
{ 
    LinkList p1 = (*L)->next; 
    LinkList p2 = NULL; 
    int j = 1; 

    while(p1 && j<i-1) 
    { 
        p1 = p1->next; 
        ++j; 
    } 

    if(!p1 || j>=i) 
    { 
        perror("Delete position error,the parameter i is error!\n"); 
        return -1; 
    } 

    p2 = p1->next; 
    p1->next = p2->next; 
    *e = p2->data; 
    free(p2); 
    (*L)->data -= 1; 

    return 0; 
} 

/**************************************************************************************************** 
 *Function Name:GetSingleListLength 
 * 
 *Function:获取单链表长度 
 * 
 *Parameter:     L:单链表表头 
 * 
 *Return Value:单链表长度 
 * 
 ***************************************************************************************************/ 
int GetSingleListLength(LinkList L) 
{ 
    if(L == NULL) 
    { 
        return -1; 
    } 

    return L->data; 
} 

/**************************************************************************************************** 
 *Function Name:DestroySingleList 
 * 
 *Function:销毁一个单链表 
 * 
 *Parameter:     L:单链表表头 
 * 
 ***************************************************************************************************/ 
void DestroySingleList(LinkList *L) 
{ 
    LinkList p1 = *L; 
    LinkList p2 = *L; 

    while(p1 != NULL) 
    { 

        p2 = p1; 
        p1 = p1->next; 
        free(p2); 
    } 
    *L = NULL; 

    return; 
}

以上是“c#线性表中链表怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI