链表的创建,插入,删除,输出

我用的是头插法

#include<stdio.h>

#include<malloc.h>

#define TURE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int ElemType;

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


//创建链表
void BuildList_L(LinkList &L, int n)
{
    LinkList p;
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    printf("请输入元素值:");
    for (int i = 0 ; i < n; i++ )
    {
        p = (LinkList)malloc(sizeof(LNode));
        scanf_s("%d", &p->data); //输入元素值
        p->next = L->next;
        L->next = p; //插入到表头
    }
}

Status ListInsert_L(LinkList &L, int i, ElemType e)
{
    //在i的带头节点的单链线性表L中的第i个位置之前插入元素e
    LinkList p;
    LinkList s;
    p = L;
    int j = 0;
    while (p && j < i - 1)  //寻找i-1个节点
    {
        p = p->next;
        ++j;
    }
    if (!p || j > i - 1)
        return ERROR;  //i小于1或者大于表长加1
    s = (LinkList)malloc(sizeof(LNode));  //生成新节点
    s->data = e;    //插入L中
    s->next = p->next;
    p->next = s;
    return OK;
}

//链表的删除
Status ListDelete_L(LinkList &L, int i, ElemType &e)
{
    //在带头结点的单链线性表L中,删除第i个元素的,并由e返回其值
    LinkList p;
    LinkList q;
    p = L;
    int j = 0;
    while (p->next && j < i - 1)
    {
        p = p->next;
        ++j;
    }
    if (!(p->next) || j > i - 1)
        return ERROR;    //删除节点不合理
    //删除并释放节点
    q = p->next;
    p->next = q->next;
    e = q->data;
    free(q);
    return OK;
}
void PrintfList(LinkList &L)
{
    LinkList p ;
    p = L->next ;
    if (p == NULL)
        printf_s("该链表为空\n");
    else
    {
        
        while (p)
        {
            printf_s("%d ", p->data);
            p = p->next ;
        }
    
    }
}

void main()
{
    LinkList l;
    int a = 0; //a为链表长度
    printf_s("请输入所要创建的链表元素的个数:");
    scanf_s("%d", &a);
    BuildList_L( l , a );
    printf_s("输出现在的链表:");
    PrintfList( l );
    printf_s("\n");
    int x = 0, y = 0;  //x代表所要插入元素的位置,y为所要插入元素的值
    printf_s("输入要 插入的元素的位置及元素的值:");
    scanf_s("%d%d", &x , &y );
    ListInsert_L( l , x , y );
    printf_s("输出现在的链表:");
    PrintfList( l );    
    printf_s("\n");
    int m = 0, n = 0;   //m代表所要删除元素的位置,n代表所要删除的元素的值
    printf_s("输入要删除的元素的位置及元素值:");
    scanf_s("%d%d", &m, &n);
    ListDelete_L( l , m , n );
    printf_s("输出现在的链表:");
    PrintfList( l );
    printf_s("\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 链表是一种常见的数据结构,它通过链接节点来存储数据。链表通常用于在线性数据结构中快速插入删除元素。 在链表插入元素的步骤如下: 1. 创建一个新节点,并将其数据域设置为要插入的数据。 2. 在链表中找到要插入的位置。 3. 将新节点的 next 指针设置为要插入的位置的节点的 next 指针。 4. 将要插入的位置的节点的 next 指针设置为新节点。 下面是用 Python 代码实现链表插入操作的示例: ``` class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def insert_at_beginning(self, data): new_node = Node(data) new_node.next = self.head self.head = new_node ``` 以上代码中,我们定义了两个类:Node 和 LinkedList。Node 类用于表示链表中的单个节点,其中包含数据域和 next 指针。LinkedList 类用于表示整个链表,其中包含 head 指针,指向链表的开头。insert_at_beginning() 方法用于在链表的开头插入新节点。 删除链表中的元素的步骤如下: 1. 在链表中找到要删除的元素。 2 ### 回答2: 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在代码中实现链表插入删除操作,可以按照以下方式进行: 链表的数据结构可以定义为一个节点类,每个节点类包含数据和指针。 ```Python class Node: def __init__(self, data): self.data = data self.next = None ``` 在链表类中,可以定义插入删除操作的方法。 ```Python class LinkedList: def __init__(self): self.head = None def insert(self, data): new_node = Node(data) if self.head is None: self.head = new_node else: current_node = self.head while current_node.next is not None: current_node = current_node.next current_node.next = new_node def delete(self, data): if self.head is None: return if self.head.data == data: self.head = self.head.next else: current_node = self.head while current_node.next is not None: if current_node.next.data == data: current_node.next = current_node.next.next return current_node = current_node.next def display(self): current_node = self.head while current_node is not None: print(current_node.data, end=" ") current_node = current_node.next print() # 换行 ``` 以上代码实现了链表插入删除操作。插入方法首先创建一个新节点,然后遍历链表找到最后一个节点,并将其next指针指向新节点。删除方法首先判断头节点是否需要删除,如果是则更新头节点,否则遍历链表找到待删除节点的前一个节点,然后将其next指针跳过待删除节点。 可以通过以下方式测试链表插入删除操作: ```Python linked_list = LinkedList() linked_list.insert(10) linked_list.insert(20) linked_list.insert(30) linked_list.display() # 输出:10 20 30 linked_list.delete(20) linked_list.display() # 输出:10 30 ``` 以上就是使用代码实现链表插入删除操作的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值