文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>单链表操作-C语言

单链表操作-C语言

时间:2010-12-16  来源:dongliqiang1985

/*
 * File: list.c
 * Date: 2010-12-15
 * Author: qiang
 * Function: 单链表的初始化,建立,插入,查找,删除
 */

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

//定义数据类型

typedef int ElemType;

//定义节点类型

typedef struct Node        //结构体名

{
    ElemType data;        //单链表数据域

    struct Node *next;    //单链表指针域

}Node,*LinkedList;        //结构体变量名


//单链表初始化

LinkedList LinkedListInit()
{
    Node *L;
    L=(Node*)malloc(sizeof(Node));    //申请节点空间

    if(L==NULL)
        printf("申请内存空间失败");
    L->next=NULL;        //初始化长度为0

    return L;
}

//单链表建立-头插法

LinkedList LinkedListCreatH()
{
    Node* L;
    L=(Node*)malloc(sizeof(Node));
    if(L==NULL)
        printf("申请内存空间失败");
    L->next=NULL;    //L为尾节点


    ElemType x;
    while(scanf("%d",&x)!=EOF)    //Windows中,CTRL+Z触发EOF;Linux中CTRL+D触发EOF

    {
        Node* p;    //创建当前节点

        p=(Node*)malloc(sizeof(Node));
        p->data=x;
        p->next=L->next;
        L->next=p;    //L节点前移,实现头插法

    }
    return L;
}

//单链表建立-尾插法

LinkedList LinkedListCreatT()
{
    Node* L;
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;        //初始化一个空链表


    Node* r;    //定义一个节点,始终指向尾节点

    r=L;        //起初r指向L


    ElemType x;
    while(scanf("%d",&x)!=EOF)
    {
        Node* p;
        p=(Node*)malloc(sizeof(Node));
        p->data=x;
        r->next=p;    //将结点插入到表头L-->|1|-->|2|-->NULL

        r=p;
    }
    r->next=NULL;    //r始终为尾节点


    return L;
}

//单链表插入:在第i个位置(i>=1)后插入元素x

LinkedList LinkedListInsert(Node* L,int i,ElemType x)
{
    //首先找出i的前驱节点

    Node* pre=L;
    int tmp;
    for(tmp=0;tmp<i;tmp++)
        pre=pre->next;

    //在前驱节点之后插入元素x

    Node* p;
    p=(Node*)malloc(sizeof(Node));
    p->next=pre->next;
    p->data=x;
    pre->next=p;

    return L;
}

//单链表删除:删除第i个元素(i>=0)

LinkedList LinkedListDel(Node* L,int i)
{
    //找到第i个元素的前驱节点

    int tmp;
    Node* pre;
    pre=L;
    for(tmp=0;tmp<i-1;tmp++)
        pre=pre->next;
    //将前驱节点直接连接下一节点

    Node* q;    //缓存删除的节点

    q=pre->next;
    pre->next=q->next;

    return L;
}

//测试主函数

int main()
{
    LinkedList list,start;

/*
    printf("清输入单链表的数据: \n");
    list=LinkedListCreatH();
    for(start=list->next;start!=NULL;start=start->next)
        printf("list data:%d \n",start->data);
*/

    printf("清输入单链表的数据: \n");
    list=LinkedListCreatT();
    for(start=list->next;start!=NULL;start=start->next)
        printf("list data:%d \n",start->data);

    int i,x;
    printf("请输入插入的位置i=:\n");
    scanf("%d",&i);
    printf("请输入插入的数据x=: \n");
    scanf("%d",&x);
    LinkedListInsert(list,i,x);
    printf("插入后的链表数据如下:\n");
    for(start=list->next;start!=NULL;start=start->next)
        printf("list data:%d \n",start->data);

    int j;
    printf("请输入要删除的位置i=:");
    scanf("%d \n",&j);
    LinkedListDel(list,j);
    printf("删除后的链表数据如下:\n");
    for(start=list->next;start!=NULL;start=start->next)
        printf("list data: %d \n",start->data);

    return 0;
}


文件: LinkedList.tar.gz
大小: 24KB
下载: 下载
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载