#include
#include
int n;
typedef struct Lnode
{
int data;
struct Lnode *next;
struct Lnode *bef;
}Lnode;
void creatlist(Lnode *&p)
{
Lnode *pr,*ps;
pr=p;
scanf("%d",&n);
for(int i=0;iscanf("%d",&ps->data);
pr->next = ps;
ps->bef = pr;
pr = ps;
}
pr->next = NULL;
}
void actlist(Lnode *&p)
{
Lnode *pr,*ps;
pr = p->next;
// ps = (Lnode*)malloc(sizeof(Lnode));
for(int i=0;i1;i++)
{
for(int j=0;j1&&pr!=NULL;j++)
{
if(pr->data > pr->next->data)
{
pr->bef=pr->next;
pr->next->bef=pr->bef;
pr->bef->next = pr->next;
pr->next = pr->next->next;
}
}
}
}
void prilist(Lnode *p)
{
Lnode *pr;
pr = p->next;
for(;pr!=NULL;)
{
printf("%d ",pr->data);
pr = pr->next;
}
}
int main()
{
Lnode *p;
p = (Lnode*)malloc(sizeof(Lnode));
p->bef = NULL;
p->next = NULL;
creatlist(p);
actlist(p);
prilist(p);
return 0;
}
排序问题
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
int data;
struct Lnode *next;
struct Lnode *bef;
} Lnode;
void create_list(Lnode *&head) {
int n;
scanf("%d", &n);
Lnode *p = head;
for (int i = 0; i < n; i++) {
Lnode *node = (Lnode*)malloc(sizeof(Lnode));
scanf("%d", &node->data);
p->next = node;
node->bef = p;
p = node;
}
p->next = NULL;
}
void sort_list(Lnode *&head) {
if (head->next == NULL) return;
Lnode *p = head->next->next;
while (p != NULL) {
Lnode *q = p->bef;
int key = p->data;
while (q != head && q->data > key) {
q->next->data = q->data;
q = q->bef;
}
if (q != head && q->data > key) {
q->next->data = q->data;
q->data = key;
} else {
q->next->data = key;
}
p = p->next;
}
}
void print_list(Lnode *head) {
Lnode *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Lnode *head = (Lnode*)malloc(sizeof(Lnode));
head->data = 0;
head->next = NULL;
head->bef = NULL;
create_list(head);
sort_list(head);
print_list(head);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: