代码如下
/*
====链表====
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node* pNext;
}NODE, * PNODE;
void init_list(PNODE p) {
int n;
int i;
printf("请输入链表元素的个数:");
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
int data;
printf("请输入第%d个元素的值:", i);
scanf_s("%d", &data);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->pNext = NULL;
pNew->data = data;
p->pNext = pNew;
p = pNew;
}
}
int length_list(PNODE pHead) {
int i = 0;
PNODE p = pHead->pNext;
while (p != NULL) {
i++;
p = p->pNext;
}
return i;
}
void insert_list(PNODE p, int index, int data) {
int i;
if (index<1 || index>length_list(p) + 1) {
printf("插入位置错误!\n");
exit(0);
}
else {
for (i = 1; i < index; i++) {
p = p->pNext;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = data;
pNew->pNext = p->pNext;
p->pNext = pNew;
printf("插入元素成功!\n");
}
}
void delete_list(PNODE p, int index) {
int i;
if (index<1 || index>length_list(p)) {
printf("删除位置错误!\n");
exit(0);
}
else {
for (i = 1; i < index; i++) {
p = p->pNext;
}
PNODE pNew = p->pNext;
p->pNext = p->pNext->pNext;
free(pNew);
printf("删除元素成功!\n");
}
}
void sort_list(PNODE pHead) {
int i, j, temp;
PNODE p, q;
for (i = 1, p = pHead->pNext; i < length_list(pHead); i++, p = p->pNext) {
for (j = i, q = p->pNext; j < length_list(pHead); j++, q = q->pNext) {
if (p->data > q->data) {
temp = p->data;
p->data = q->data;
q->data = temp;
}
}
}
}
void traverse_list(PNODE pHead) {
printf("当前链表的元素为:\n");
PNODE p = pHead->pNext;
while (p != NULL) {
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
}
int main() {
PNODE p = (PNODE)malloc(sizeof(NODE));
PNODE last = p;
last->pNext = NULL;
init_list(last);
traverse_list(p);
insert_list(p, 6, 6);
traverse_list(p);
delete_list(p, 3);
traverse_list(p);
sort_list(p);
traverse_list(p);
return 0;
}