函数原型没有声明,其他的没看,写的太复杂,其实插入理解了过程就很简单,下面是我写的一个简化了的:
#include
#include
#include
typedef struct node
{
char name[10];
struct node *next;
}node;
void insert(node *s)
{
int place = 0, i = 0;
struct node *p = NULL, *q = NULL;
q = s;
p = (node*)malloc(sizeof(node)); //给插入的结点分配内存
printf("input the node's name: ");
scanf("%s", p->name);
printf("input the place(after this): "); //插入位置(在输入位置之后,输入位置大于0)
scanf("%d", &place);
for (i = 1; i < place; i++)
q = q->next;
p->next = q->next;
q->next = p; //完成插入结点
}
void display(node *s)
{
node *p = s;
while (p->next != NULL)
{
p = p->next;
printf("%s\n", p->name);
}
printf("\n");
}
void main()
{
node *s = NULL;
int i = 0, choose = 0;
s = (node*)malloc(sizeof(node)); //生成头结点,不存储数据
s->next = NULL;
for ( ; ; )
{
printf("\n* * * * * *"
"\n* 1 insert"
"\n* 2 display"
"\n* * * * * *\n");
printf("input your select: ");
scanf("%d", &choose);
switch (choose)
{
case 1:
insert(s);
break;
case 2:
display(s);
break;
default:
break;
}
}
}
你的编码风格很差,觉得我的还行就看看吧。
貌似没什么问题啊 你的数据库可能有问题吧
while(p)
{
if(p->data.num
if(p->next==NULL){p->next=q;q->next=NULL;break;}
else
p=p->next;
else l->next=q;q->next=p;
}
shoudsave=1;
//没看明白你的循环链表什么意思,没有必要循环链表把,这样写要提前保证链表中有至少一个记录。从小到大排列