用C语言完成定义结点类型,创建链表,遍历链表,链表排序,借点查找,插入结点,删除结点等操作的程序
时间: 2023-07-10 14:15:39 浏览: 102
线性链表 链式存储 操作代码
3星 · 编辑精心推荐
好的,我会根据您的要求回答问题,以下是用C语言完成定义结点类型,创建链表,遍历链表,链表排序,借点查找,插入结点,删除结点等操作的程序:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表结点类型
typedef struct node {
int data; //数据域
struct node *next; //指向下一个结点的指针
} Node;
//创建链表
Node *createList(int n) {
Node *head = NULL; //链表头指针
Node *tail = NULL; //链表尾指针
int i = 0;
for (i = 0; i < n; i++) {
Node *p = (Node *)malloc(sizeof(Node)); //创建新结点
printf("请输入第 %d 个结点的数据:", i + 1);
scanf("%d", &(p->data));
p->next = NULL;
if (head == NULL) { //如果链表为空,新结点就是头结点
head = p;
tail = p;
} else { //否则将新结点插入到链表末尾
tail->next = p;
tail = p;
}
}
return head;
}
//遍历链表
void traverseList(Node *head) {
Node *p = head;
printf("链表的数据为:");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//链表排序
void sortList(Node *head) {
Node *p = head;
Node *q = NULL;
int tmp = 0;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (p->data > q->data) {
tmp = p->data;
p->data = q->data;
q->data = tmp;
}
q = q->next;
}
p = p->next;
}
}
//结点查找
Node *findNode(Node *head, int data) {
Node *p = head;
while (p != NULL && p->data != data) {
p = p->next;
}
return p;
}
//插入结点
void insertNode(Node *head, int pos, int data) {
Node *p = head;
int i = 0;
while (p != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (p == NULL || i > pos - 1) {
printf("插入位置非法\n");
return;
}
Node *q = (Node *)malloc(sizeof(Node));
q->data = data;
q->next = p->next;
p->next = q;
}
//删除结点
void deleteNode(Node *head, int data) {
Node *p = head;
Node *q = NULL;
while (p != NULL && p->data != data) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("要删除的结点不存在\n");
return;
}
if (q == NULL) { //要删除的结点是头结点
head = p->next;
} else {
q->next = p->next;
}
free(p);
}
int main() {
int n = 0; //链表长度
printf("请输入链表长度:");
scanf("%d", &n);
Node *head = createList(n); //创建链表
traverseList(head); //遍历链表
sortList(head); //链表排序
traverseList(head); //遍历链表
int data = 0; //要查找的结点的数据
printf("请输入要查找的结点的数据:");
scanf("%d", &data);
Node *p = findNode(head, data); //查找结点
if (p == NULL) {
printf("未找到要查找的结点\n");
} else {
printf("要查找的结点的数据为:%d\n", p->data);
}
int pos = 0; //要插入的位置
printf("请输入要插入的位置:");
scanf("%d", &pos);
printf("请输入要插入的数据:");
scanf("%d", &data);
insertNode(head, pos, data); //插入结点
traverseList(head); //遍历链表
printf("请输入要删除的结点的数据:");
scanf("%d", &data);
deleteNode(head, data); //删除结点
traverseList(head); //遍历链表
return 0;
}
```
以上是一个简单的链表操作的程序,可以实现定义结点类型,创建链表,遍历链表,链表排序,借点查找,插入结点,删除结点等操作。
阅读全文