将链表变成有序链表并定义mink和maxk,删除大于mink和小于maxk的数据,mink和maxk可不与链表数据相同。
//代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define OK 1
#define ERROR 0
#define T 1
#define F -1
typedef int Status;
typedef struct Dlist {
int data;
struct Dlist* next;
}Dlist, * Zdlist;
//创建
Status Cj_List(Zdlist& L) {
L = (Zdlist)malloc(sizeof(int));
if (L) {
L->next = NULL;
printf("创建成功!\n");
return OK;
}
printf("创建失败!\a\n");
return ERROR;
}
//插入
Status Cr_List(Zdlist& L, int i, int e) {
Zdlist p, s;
p = L;
int j = 0; //判断是否有头结点,无头节点则创建失败。
while (p && (j < i - 1)) {
p = p->next;
++j;
}
if (!p || j > i - 1) {
printf("插入失败!\a\n");
return ERROR;
}
s = (Zdlist)malloc(sizeof(int));//插入时先新建头结点
s->next = NULL; //定义p=L用p代替L进行指针遍历,防止丢失头结点
s->data = e;
s->next = p->next;
p->next = s;
printf("插入成功!\n");
return OK;
}
//输出
Status Sc_List(Zdlist L) {
Zdlist p = L;
int sum = 0;
if (!p->next) {
printf("链表为空!\a\n");
return ERROR;
}
printf("全部学生数据:\n");
while (p->next != NULL) {
p = p->next;
sum++; //输出总人数
printf("%3d", p->data);
}
return OK;
}
//冒泡排序
void Px_List(Zdlist &L,int n) {
Zdlist p = L->next;
int temp;
for (int i = 0; i < n; i++) {
for (int j = 0; j < (n-1) - i;j++) {
if ((p->data) > (p->next->data)) {
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
p = p->next;
}
else {
p = p->next;
}
}
p = L->next;
}
}
//删除大于mink切小于maxk的数据
void Sia_List(Zdlist &L) {
Zdlist p = L;
int mink, maxk;
printf("输入范围:mink maxk \n");
scanf("%d %d", &mink, &maxk);
while (p->next != NULL) {
if (p->next->data > mink && p->next->data < maxk) {
p->next = p->next->next;
}
else {
p = p->next;
}
}
}
//主函数
int main() {
Zdlist L;
int e;
int choose;
int i, n = 10;
int sum = n;
Cj_List(L);
while (n > 0) {
printf("位置 数据:\n");
scanf("%d %d", &i,&e);
Cr_List(L, i, e);
n--;
}
Sc_List(L);
printf("\n");
Px_List(L,sum);
Sc_List(L);
printf("\n");
Sia_List(L);
Sc_List(L);
printf("\n");
return 0;
}