#include<stdio.h>#include<malloc.h>typedef struct node //定义链表...{ int data; struct node *next;}snode;snode* creat() //创建链表的函数...{ snode *head, *p, *q; head = (snode *)malloc(sizeof(snode)); p = head; int x; printf("请输入创建链表的值,用-1结束输入 "); printf("x = "); scanf("%d", &x); while (x != -1) ...{ q = (snode *)malloc(sizeof(snode)); q->data = x; p->next = q; p = q; printf("x = "); scanf("%d", &x); } p->next = NULL; return head;}int length(snode *head)//测链表的结点数...{ snode *p = head->next; int i = 0; while (p != NULL) ...{ p = p->next; i++; } return i;}void display(snode *head) //依次输出每个结点的值...{ snode *p = head->next; for(int i = 0; i < length(head); i++) ...{ printf("%4d", p->data); p = p->next; } printf(" ");}int locate(snode *head, int x) //测x在链表中的位置...{ snode *p = head->next; int i = 1; while (p != NULL && x != p->data) ...{ p = p->next; i++; } if (p == NULL) //什么叫等于,两个等号才叫等于. return 0; else return i;}int insnode(snode *head, int x, int i) //把x插入到链表的第i的位置...{ snode *p = head->next, *s; int j; if(i < 1 || i > length(head) + 1) return 0; else if (i == 1) ...{ s = (snode *)malloc(sizeof(snode)); s->next = p; head->next = s; s->data = x; } else ...{ for (j = 1; j < i - 1; j++) p = p->next; s = (snode *)malloc(sizeof(snode)); s->next = p->next; p->next = s; s->data = x; } return 1;}int delnode(snode *head, int i)//删除链表中第i个结点...{ snode *p = head->next, *q = head; if(i < 1 || i > length(head)) return 0; else if (i == 1) ...{ head->next = p->next; free(p); } else ...{ for (int j = 1; j < i; j++) ...{ p = p->next; q = q->next; } q->next = p->next; free(p); } return 1;}void sort(snode *head) //把链表中每个结点的值按从小到大排列...{ snode *p, *q; int k; for(p = head->next; p != NULL; p = p->next) for(q = p->next; q != NULL; q = q->next) if (p->data > q->data) ...{ k = p->data; p->data = q->data; q->data = k; }}void insert(snode *head, int x) //在有序链表中插入x,插入后仍保持有序...{ snode *p = head->next, *s, *q = head; while (p != NULL && p->data < x) ...{ q = q->next; p = p->next; } s = (snode *)malloc(sizeof(snode)); s->next = q->next; s->data = x; q->next = s;}void del_min_max(snode *head, int min, int max) //删除有序链表中值min到值max中的结点...{ snode *p = head->next, *q = head; while (p != NULL && p->data <= min) ...{ q = p; p = p->next; } while (p != NULL && p->data < max) ...{ q->next = p->next; free(p); p = q->next; }}void del_min(snode *head) // 删除数据域最小的结点...{ snode *p = head->next, *q = head; snode *p_min, *q_min; p_min = p; q_min = q; while (p != NULL) ...{ q = p; p = p->next; if (p != NULL && p->data < p_min->data) ...{ q_min = p_min; p_min = p; } } q_min->next = p_min->next; free(p_min);}int main(void)...{ snode *headl = creat(); //创建链表 printf("最初的链表如下: "); display(headl); int num, location; printf("请输入您要查找的数:"); scanf("%d", &num); if (locate(headl, num)) printf("数字%d在链表中的位置为%d ", num, locate(headl, num)); else printf("数字%d在链表中不存在 ", num); printf("请分别输入您要插入到链表中的数以及想插入的位置:"); scanf("%d %d", &num, &location); if (insnode(headl, num, location)) ...{ printf("插入新值以后的链表如下: "); display(headl); } else printf("输入有误 "); printf("请输入您想删除的结点位置:"); scanf("%d", &location); if (delnode(headl, location)) ...{ printf("删除第%d个结点后的链表如下: ", location); display(headl); } else printf("输入有误! "); sort(headl); //排序 printf("经过把结点数据按从小到大排序以后的链表如下: "); display(headl); printf("请输入一个将被插入到有序链表中的数:"); scanf("%d", &num); insert(headl, num); printf("将%d插入到有序链表中后,链表仍然有序,如下: ", num); display(headl); int min, max; printf("请输入需要删除的一段结点的头和尾,他们之间的结点将被删除:"); scanf("%d %d", &min, &max); del_min_max(headl, min, max); printf("经过删除以后的链表如下: "); display(headl); printf("经过删除最小数据域的结点以后的链表如下: "); del_min(headl); display(headl);}