单链表的基本操作代码C语言
时间: 2023-11-12 18:51:18 浏览: 87
单表的基本操作代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结点
typedef struct LNode{
int data; // 数据域
struct LNode* next; // 指针域
} *LinkList, LNode;
// 初始化链表
void initList(LinkList* L) {
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
}
// 头插法创建链表
void createListHead(LinkList* L, int n) {
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
LNode* p;
int i;
for (i = 0; i < n; i++) {
p = (LNode*)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = (*L)->next;
(*L)->next = p;
}
}
// 尾插法创建链表
void createListTail(LinkList* L, int n) {
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
LNode* p, * tail;
tail = *L;
int i;
for (i = 0; i < n; i++) {
p = (LNode*)malloc(sizeof(LNode));
scanf("%d", &(p->data));
tail->next = p;
tail = p; }
tail->next = NULL;
}
// 按位序插入结点
int insertList(LinkList L, int i, int data) {
LNode* p = L;
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || j > i - 1) {
return 0;
}
LNode* newNode = (LNode*)malloc(sizeof(LNode));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
return 1;
}
// 按位序删除结点
int deleteList(LinkList L, int i) {
LNode* p = L;
int j = 0;
while (p->next && j < i - 1) {
p = p->next;
j++;
}
if (!(p->next) || j > i - 1) {
return 0;
}
LNode* q = p->next;
p->next = q->next;
free(q);
return 1;
}
// 按位查找结点
LNode* getElem(LinkList L, int i) {
LNode* p = L->next;
int j = 1;
while (p && j < i) {
p = p->next;
j++;
}
if (!p || j > i) {
return NULL;
}
return p;
}
// 销毁链表
void destroyList(LinkList* L) {
LNode* p, * q;
p = *L;
while (p) {
q = p;
p = p->next;
free(q);
}
*L = NULL;
}
// 打印链表
void printList(LinkList L) {
LNode* p = L->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkList L;
int n, data;
scanf("%d", &n);
createListHead(&L, n);
printList(L);
destroyList(&L);
return 0;
}
```
阅读全文