typedef struct xueshengzheng
{
char xuehao[20];
struct xueshengzheng *Next;
struct xueshengzheng *Last;
}*hData,Data;
struct xueshengzheng *head;
head=(hData)malloc(sizeof(struct xueshengzheng));
head->Next=NULL;
while(1)
{
hData p2=NULL,p1;
p1=&head;
p2=(hData)malloc(sizeof(struct xueshengzheng)); //录入信息的结点
scanf("%s",p2->xuehao);
if(strcmp(p2->xuehao,"00000000")==0)
break;
p2->Next=NULL;
if(head->Next==NULL) //头节点的连接
{
head->Next=p2;
p2->Last=head;
}
else
{
while((p1->Next!=NULL)&&(strcmp(p2->xuehao,p1->Next->xuehao)>0)) //判定结点连接位置
{
p1=p1->Next;
}
if((strcmp(p2->xuehao,p1->xuehao)<0)&&(p1->Next!=NULL))//如果链表出现比新结点小的学号则将新结点连接
{
p2->Next=p1->Next;
p1->Next->Last=p2;
p1->Next=p2;
p2->Last=p1;
printf("u");
}
if(p1->Next==NULL) //如果链表到达末尾,则直接连接结点
{
p1->Next=p2;
p2->Last=p1;
}
}
}
各位大佬,可以看看我这个根据学号建立的双向链表有什么问题吗。。。改了一天了,还是没改出来,真的大脑有点乱,请各位大佬高抬贵手了~~~谢谢大佬们。
刚才有点问题,没考虑最后一个添加,已经修改,请看看:
#include <stdio.h>
#include <stdlib.h>
typedef struct xueshengzheng
{
char xuehao[32];
struct xueshengzheng *Last;
struct xueshengzheng *Next;
}*hData;
hData head;
void main()
{
head = (hData)malloc(sizeof(struct xueshengzheng));
head->Next = NULL;
while (1)
{
hData p2 = NULL, p1;
p1 = head;
p2 = (hData)malloc(sizeof(struct xueshengzheng));
scanf("%s", p2->xuehao);
if (strcmp(p2->xuehao, "00000000") == 0)
break;
p2->Next = NULL;
if (head->Next == NULL)
{
head->Next = p2;
p2->Last = head;
printf("插入第一个节点\n");
}
else
{
while ((p1->Next != NULL) && (strcmp(p2->xuehao, p1->Next->xuehao) > 0))
{
p1 = p1->Next;
}
if (p1->Next != NULL)
{
if ((strcmp(p2->xuehao, p1->Next->xuehao) < 0))
{
p2->Next = p1->Next;
p1->Next->Last = p2;
p1->Next = p2;
p2->Last = p1;
printf("插入节点\n");
}
}
else
{
p1->Next = p2;
p2->Last = p1;
}
}
}
system("pause");
}