用c语言创建一个单链表实现链表的插入和删除代码
时间: 2024-05-08 08:17:03 浏览: 14
```python
import string
# 读入英文字符串
s = input()
# 统计小写字母出现次数
count = {}
for c in s:
if c.islower():
count[c] = count.get(c, 0) + 1
# 按照出现次数从小到大排序
count = sorted(count.items(), key=lambda x: x[1])
# 输出柱状图
for c, cnt in count:
if cnt == 0:
continue
print(c + ": " + "*" * cnt)
```
输入样例:
```
Hello, World!
```
输出样例:
```
w: *
d: *
r: *
o: **
l: **
H: *
e: ***
```
解释:小写字母出现次数从小到大排序为:`w: 1, d: 1, r: 1, o: 2, l: 2, H: 1, e: 3`,因此先输出出现次数为1的字母,再输出出现次数为2的字母,最后输出出现次数为3的字母。
相关问题
用c语言编写一个单链表实现单链表的插入与删除
好的,下面是用C语言实现单链表的插入与删除的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node;
// 初始化链表
Node *initList() {
Node *head = (Node *)malloc(sizeof(Node)); // 创建头节点
head->next = NULL; // 头节点的指针域为空
return head;
}
// 插入节点
void insertNode(Node *head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新节点
newNode->data = data; // 新节点的数据域为data
newNode->next = head->next; // 新节点的指针域指向头节点的下一个节点
head->next = newNode; // 头节点的指针域指向新节点
}
// 删除节点
void deleteNode(Node *head, int data) {
Node *p = head->next; // p指向头节点的下一个节点
Node *pre = head; // pre指向头节点
while (p != NULL) { // 遍历链表
if (p->data == data) { // 找到要删除的节点
pre->next = p->next; // 将前一个节点的指针域指向要删除节点的下一个节点
free(p); // 释放要删除的节点的内存空间
return;
}
pre = p; // pre指向p
p = p->next; // p指向下一个节点
}
}
// 打印链表
void printList(Node *head) {
Node *p = head->next; // p指向头节点的下一个节点
while (p != NULL) { // 遍历链表
printf("%d ", p->data); // 输出节点的数据域
p = p->next; // p指向下一个节点
}
printf("\n");
}
int main() {
Node *head = initList(); // 初始化链表
insertNode(head, 1); // 插入节点1
insertNode(head, 2); // 插入节点2
insertNode(head, 3); // 插入节点3
printList(head); // 打印链表:1 2 3
deleteNode(head, 2); // 删除节点2
printList(head); // 打印链表:1 3
return 0;
}
```
用c语言创建一个单链表,并完成插入、删除和查找等操作。
单链表是一种常见的数据结构,可以通过C语言来创建和操作。
首先,我们需要定义一个结构体来表示单链表的节点,节点包括数据类型和指向下一个节点的指针。定义如下:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
接下来,我们可以通过定义一个指向头节点的指针来创建一个空的单链表:
```c
Node* head = NULL;
```
插入操作可以通过以下步骤实现:
1. 创建一个新节点并为它分配内存。
2. 将新节点的数据设置为所需的值。
3. 将新节点的next指针设置为当前节点的next指针。
4. 将当前节点的next指针指向新节点。
```c
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = 10;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
```
删除操作可以通过以下步骤实现:
1. 找到要删除的节点的前一个节点。
2. 将前一个节点的next指针指向要删除节点的下一个节点。
3. 释放被删除节点的内存。
```c
int key = 10; // 要删除的节点值
Node* current = head;
Node* previous = NULL;
while (current != NULL && current->data != key) {
previous = current;
current = current->next;
}
if (current != NULL) {
if (previous != NULL) {
previous->next = current->next;
} else {
head = current->next;
}
free(current);
}
```
查找操作可以通过以下步骤实现:
1. 从头节点开始,依次遍历每个节点,直到找到所需节点或到达链表尾部。
2. 返回找到的节点指针,或者返回NULL表示节点不存在。
```c
int key = 10; // 要查找的节点值
Node* current = head;
while (current != NULL && current->data != key) {
current = current->next;
}
if (current != NULL) {
printf("找到了节点:%d\n", current->data);
} else {
printf("未找到节点:%d\n", key);
}
```
通过以上步骤,我们可以创建、插入、删除和查找单链表中的节点。当然,在实际应用中可能还需要实现其他操作,例如获取链表长度、反转链表等。