• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

单链表的创建和基本操作C语言

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

创建单链表,首先要建立一个结构体,如下:

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Lnode{
    ElemType data;
    struct Lnode *next;
}Lnode,*LinkList;

创建链表,这里使用的是尾插法建立链表,它主要是在表尾不断地添加新元素,直到输入-1,然后退出。

LinkList CreatList()//创建列表 
{
    ElemType x;
    LinkList head,p,tail;
    head=(LinkList)malloc(sizeof(Lnode));
    head->next=NULL;
    tail=head;
    scanf("%d",&x);
    while(x!=-1){
        p=(LinkList)malloc(sizeof(Lnode));
        p->data=x;
        p->next=NULL;
        tail->next=p;
        tail=p;
        scanf("%d",&x); 
    }
    return head;
}

计算表长,运用遍历,将链表的长度利用一个变量存储,然后有指针存储。

int LongList(LinkList head,int* length)//计算表长 第一个元素列表 第二个存储表长 
{
    LinkList p;
    p=(LinkList)malloc(sizeof(Lnode));
    p=head->next;
    if(p==NULL){
        return 0;
    } 
    int i=1;
    while(p){
        p=p->next;
        i++;
    }
    *length=i-1;//因为每次先查询后面的元素,所以i也把最后一个NULL加了进去,所以要减一 
    return 1;
}

插入元素,单链表插入元素,需要知道该位置的链表元素,然后先将插入元素的尾部连接到链表内,再将该节点的头部接入。

int insert(LinkList head,int i,ElemType x)//插入 1链表 2插入位置 3插入元素 
{
    LinkList p,s;
    p=(LinkList)malloc(sizeof(Lnode));
    p=head->next;
    int j=1;
    while(p&&j!=i-1){
        p=p->next;
        j++;
    }
    if(p==NULL||j!=i-1){
        return 0;
    }
    s=(LinkList)malloc(sizeof(Lnode));
    s->data=x;
    s->next=p->next;
    p->next=s;
    return 1;
}

删除元素,需要知道该元素前面位置的链表节点,然后进行删除,并返回删除元素,同时也要将该节点内存释放。

int DelList(LinkList head,int i,ElemType *n)//删除元素 1链表 2删除位置 3记录删除元素 
{
    LinkList p,s;
    p=(LinkList)malloc(sizeof(Lnode));
    p=head->next;
    s=(LinkList)malloc(sizeof(Lnode));
    int j=1;
    while(j!=i-1&&p){
        p=p->next;
        j++;
    }
    if(j!=i-1||p->next==NULL){
        return 0;
    }
    s=p->next;
    p->next=s->next;
    *n=s->data;
    free(s);
    return 1;
}

查询元素,利用遍历列表,找到要查找位置的元素,并返回。

int search(LinkList head,int i,ElemType *n)//查找元素 1链表 2查找元素的位置 3该位置上的元素是什么 
{
    LinkList p;
    p=(LinkList)malloc(sizeof(Lnode));
    p=head->next;
    int j=1;
    while(j!=i&&p){
        p=p->next;
        j++;
    }
    if(p==NULL||j!=i){
        return 0;
    }
    *n=p->data;
    return 1;
}

输出单链表所有元素。

void print(LinkList head)//输出 
{
    LinkList p;
    p=head->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
}

在该链表的创建和基本操作中,我都返回了0或1,其作用是测试单链表的操作是否符合规则,操作成功,返回1,失败,返回0。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++让类只在堆或栈上分配发布时间:2022-07-13
下一篇:
c++2的幂次方发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap