链表——C和Java实现

——2014.7.9 Java实现的链表(转http://blog.csdn.net/aaaaaaaa0705/article/details/6717166)——

网速可以再卡一点吗

 

——原始——

C语言实现的单链表

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct _Node

{

    char name[32];

    struct _Node *next;

} Node;

typedef struct _Node *PtrNode;//建立指向_Node类型数据的指针*PtrNode

void InitList(PtrNode *ls)//初始化链表

{

    *ls = (PtrNode)malloc(sizeof(Node));

    strcpy((*ls)->name, "Nothing"); //默认name值为Noting

    (*ls)->next = NULL;//默认为空指针

}

void CreateList(PtrNode ls, int n)//尾插法建立链表,结点数为n个

{

    PtrNode p, rear;

    char tmpName[32];//声明字符数组

    int i;

    rear = ls;

    for(i=0; i<n; i++)

    {

        p = (PtrNode)malloc(sizeof(Node));

        scanf("%s", tmpName);

        strcpy(p->name, tmpName);

        rear->next = p;  //给p节点的name、next赋值

        rear = p;   //rear回到链表最后位置

    }

    rear->next = NULL;  //链表尾节点指向空

}

void TraverseList(PtrNode ls) //遍历打印

{

    PtrNode p=ls->next;//p指向第一个结点

    while(p!=NULL)

    {

        printf("%s->", p->name);

        p = p->next;

    }

    printf("null\n");

}

PtrNode LocateElem(PtrNode ls, char key_name[32])//查找name值等于参数key_name的第一个结点,没有则返回空

{

    PtrNode p, q;

    p = ls;

    q = ls->next;

    while(q!=NULL)

    {

        if(strcmp(q->name, key_name)==0)

            break;  //找到与key_name相等的元素后直接跳出循环

        p = q;

        q = q->next;

    }

    if(q==NULL)

        return NULL;

    else

        return p;//此时p->next就是要找的结点

}

PtrNode GetElem(PtrNode ls, int j)//找到链表中第j个结点

{

    PtrNode p=ls;

    int i=0;

    if(j<0) return NULL;//参数不能小于0

    while(p!=NULL&&i<j)//j大于链表长度的情况下p指向的是最后一个元素

    {

        p=p->next;

        i++;

    }

    return p;

}

void InsertNode(PtrNode p, char newName[32])//将name值为newName的新结点插入到p的当前位置,p自动后移

{

    PtrNode s = (PtrNode)malloc(sizeof(Node));

    strcpy(s->name, newName);

    s->next = p->next;

    p->next = s;

}

void DeleteNode(PtrNode p)//删除结点p

{

    PtrNode s=p->next;//暂存p的next值

    if(s!=NULL)

    {

        p->next = s->next;

        free(s);//销毁这个结点

    }

}

void DestroyList(PtrNode *ls)//销毁链表ls

{

    PtrNode p = *ls, q;

    while(p!=NULL)//用p遍历ls,依次销毁ls的每一个结点

    {

        q = p;

        p = p->next;

        free(q);

    }

    *ls = NULL;

}

int GetLength(PtrNode ls)//返回ls的结点个数

{

    PtrNode p=ls->next;

    int i=0;

    while(p!=NULL)

    {

        p=p->next;

        i++;

    }

    return i;

}

void BubbleSort(PtrNode ls)//对链表进行冒泡排序,最终为升序

{

    int i, j, n = GetLength(ls);

    int bFlag=1;

    char tmpName[32];

    PtrNode p, q;

    for(i=0; i<n-1&&bFlag==1; i++)

    {

        bFlag = 0;

        p = ls->next;

        for(j=0; j<n-1-i; j++)

        {

            q = p->next;

            if(strcmp(p->name, q->name)>0)//strcmp:比较英文字符串大小,参数1大于参数2时执行if内的语句

            {         //百度百科:strcmp

                strcpy(tmpName, p->name);

                strcpy(p->name, q->name);

                strcpy(q->name, tmpName);//对调p和q的name值

                bFlag = 1;

            }

            p = p->next;

        }

    }

} 

//-------------------------------------------

int main()

{

    int n=4;

    PtrNode myLkList, pNode;

    char keyName[32], newName[32];

    InitList(&myLkList);//初始化

    CreateList(myLkList, n);//插入4个结点

    TraverseList(myLkList);//遍历打印

 printf("请输入要查找的关键字\n");

    scanf("%s", keyName);//输入要查找的keyName

    pNode=LocateElem(myLkList, keyName);//pNode为此keyName的位置下标

    if(pNode!=NULL)//若存在这个keyName就在这个结点的下一个位置插入一个新结点

    {

  printf("请输入要添加的新结点\n");

  scanf("%s", newName);

     InsertNode(pNode, newName);

 }

    TraverseList(myLkList);//遍历打印

    pNode = GetElem(myLkList, 4);//查到到第4个结点

    if(pNode!=NULL)//将此结点之后的统统删除

        DeleteNode(pNode);

 printf("删除第四个以后的结点:\n");

    TraverseList(myLkList);//遍历打印

    return 0;

}

转载于:https://my.oschina.net/SnifferApache/blog/210629

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值