C语言单链表的创建和添加结点

#include<stdio.h>

//无头结点
#define LINKLIST_H
typedef struct
{
int data;
struct LNode *next;
}Node,*lnode;   //Node结构体名称,*lnode结构体指针类型


lnode create(){
//创建的时候用到了尾指针。但是下面的add结点没有用到。两者用的都是尾插入法
lnode L= (lnode)malloc(sizeof(Node));
lnode new,end;
int x=0;
//初始化一个列表
if (L != NULL) {
L->data = 1;
L->next = NULL;
}
end = L;
//尾插入法
for (int i = 2; i <= 6; i++) {
new = (lnode)malloc(sizeof(Node));
new->data = i;
new->next = NULL;
end->next = new;
end = new;
}


return L;


}
void show(lnode t) {
{
//printf("%%%%%%%%%%%%%\n");
lnode tem;
tem =(lnode)malloc(sizeof(Node));
tem = t;
while (tem!=NULL)
{
printf("%d\n", tem->data);
tem = tem->next;
printf("\n");
}
}
}
void main() {
lnode T;
//Node *p;
T=create( );
show(T);      //错因,此处的不能用&T,因为定义是指针
system("pause");
}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单链表是一种常见的数据结构,它由一个个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是C语言单链表创建,插入、删除、查找和打印算法。 1. 创建单链表 单链表创建过程分为两步:创建结点添加数据节点。 ```c struct Node { int data; // 数据域 struct Node* next; // 指针域 }; // 创建结点 struct Node* createList() { struct Node* head = (struct Node*)malloc(sizeof(struct Node)); head->next = NULL; return head; } // 添加数据节点 void addNode(struct Node* head, int data) { struct Node* p = (struct Node*)malloc(sizeof(struct Node)); p->data = data; p->next = head->next; head->next = p; } ``` 2. 插入节点 单链表的插入操作需要知道要插入的位置和要插入的数据。假设要在第k个节点后插入一个数据为x的节点,那么需要先找到第k个节点,然后新建一个节点,将x赋值给它的数据域,将它的指针域指向第k个节点的下一个节点,将第k个节点的指针域指向新节点。 ```c // 在第k个节点后插入数据x void insertNode(struct Node* head, int k, int x) { struct Node* p = head->next; int i = 1; while (p && i < k) { p = p->next; i++; } if (p == NULL || i > k) { printf("插入位置无效\n"); return; } struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = x; newNode->next = p->next; p->next = newNode; } ``` 3. 删除节点 单链表的删除操作也需要知道要删除的位置,假设要删除第k个节点,那么需要先找到第k-1个节点,将它的指针域指向第k+1个节点,然后释放第k个节点。 ```c // 删除第k个节点 void deleteNode(struct Node* head, int k) { struct Node* p = head; int i = 0; while (p->next && i < k-1) { p = p->next; i++; } if (p->next == NULL || i > k-1) { printf("删除位置无效\n"); return; } struct Node* q = p->next; p->next = q->next; free(q); } ``` 4. 查找节点 单链表的查找操作需要遍历整个链表,找到第一个数据等于给定值的节点。 ```c // 查找第一个数据等于x的节点 struct Node* findNode(struct Node* head, int x) { struct Node* p = head->next; while (p && p->data != x) { p = p->next; } return p; } ``` 5. 打印链表 单链表的打印操作需要遍历整个链表,依次输出每个节点的数据域。 ```c // 打印链表 void printList(struct Node* head) { struct Node* p = head->next; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值