输入n个整数,创建一个双向循还链表表进行存储,这些整数从第二个结点至表尾递增有序(设a1
【样例输出】1 2 3 4 5
【样例说明】输入数据的第一个数是整数的个数,其后是数据
#include
#include
typedef struct dnode
{
int data;
struct dnode* back, * next;
}dnode, * doublelist;
void initlist(doublelist *l)
{
*l = (doublelist)malloc(sizeof(dnode));
(*l)->next = (*l)->back = *l;
}
int dlinkins(doublelist l, int i, int e)
{
dnode* s, * p;
int k;
if (i <= 0) return 0;
p = l; k = 0;
while (p != NULL && k < i - 1)
{
p = p->next;
k = k + 1;
}
if (p == NULL)
{
printf("插入位置不合理");
return 0;
}
s = (dnode*)malloc(sizeof(dnode));
if (s)
{
s->data = e;
s->back = p->back;
p->back->next = s;
s->next = p;
p->back = s;
return 1;
}
else return 0;
}
void sortlist(doublelist l)
{
dnode* p, * q, * r;
p = l->next; q = p->next; r = q->next;
while (q != l)
{
while ((p != l) && (p->data > q->data))
p = p->back;
q->back->next = r; r->back = q->back;
q->next = p->next; q->back = p;
p->next->back = q; p->next = q;
q = r; p = q->back;
r = r->next;
}
}
void shownode(doublelist l)
{
doublelist temp = l;
while (l->next != temp)
{
printf("%d", l->data);
l = l->next;
}
printf("%d", l->data);
}
int main()
{
int m = 0; int i;
doublelist *l;
initlist(&l);
scanf_s("%d", &m);
for (i = 0; i < m; i++)
{
int j = 0;
scanf_s("%d", &j);
dlinkins(l, 1, j);
}
sortlist(l);
shownode(l);
return 0;
}
首先第一个问题,你这编译器不报错吗
1级指针地址穿过去要2级指针接收才可以