|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看完就自己写了一个一次指令没有问题,但是同一个指令进行多次就出现段错误(例如插入和查找操作,进行一到两次没有问题,但是多试几组就会出现段错误) ,想请大神给小白解惑
以下是代码:
#include<stdio.h>
typedef struct Cir_list
{
int date;
struct cir_list *next;
}cir_list;
int main()
{
cir_list *the_head=NULL;
int instrust;
printf("1:初始化单链表\n");
printf("2:插入元素\n") ;
printf("3:删除元素\n");
printf("4:查找元素位置\n");
printf("5:打印所有数据\n");
printf("-1:退出程序\n");
while(1)
{
scanf("%d",&instrust);
switch(instrust)
{
case 1:setup(&the_head);break;
case 2:insert(the_head,&the_head);break;
case 3:del_target(&the_head);break;
case 4:lookfor(the_head);break;
case 5:print_list(the_head);break;
case -1:free_list(the_head);return 0;
}
}
}
void setup(cir_list **the_head)
{
int num;
cir_list *temp,*target;
int i=0;
printf("输入数据(0表示初始化结束)");
while(1)
{
scanf("%d",&num);
temp=(cir_list *)malloc(sizeof(cir_list));
temp->date=num;
if(num!=0)
{
if(i==0)
{
*the_head=temp;
temp->next=*the_head;
i++;
}
else
{
for(target=*the_head;target->next!=*the_head;target=target->next);
target->next=temp;
temp->next=*the_head;
}
}
else {printf("初始化完成,请进行下一步操作/n");break;}
}
return;
}
void insert(cir_list*the_head,cir_list **The_head)
{
int num,i,j=1;
cir_list *temp,*target;
printf("请输入需要插入的数据:");
scanf("%d",&num);
printf("请输入插入位置:");
scanf("%d",&i);
target=(cir_list*)malloc(sizeof(cir_list));
target->date=num;
if(i==1)
{
target->next=*The_head;
*The_head=target;
}
else
{
for(temp=the_head;j<i-1;j++)
{
temp=temp->next;
}
target->next=temp->next;
temp->next=target;
}
printf("插入成功/n");
return;
}
void del_target(cir_list **the_head)
{
int m;
cir_list *temp;
cir_list *p,*q;
printf("请输入需要删除的数据:");
scanf("%d",&m);
if((*the_head)->date==m)
{
for(p=*the_head;p->next!=*the_head;p=p->next);
temp=*the_head;
*the_head=(*the_head)->next;
p->next=*the_head;
free(temp);
}
else
{
for(p=*the_head,q=(*the_head)->next;q->date!=m&&p->next!=*the_head;p=p->next,q=q->next);
if(p->date!=m&&p->next==*the_head) printf("无此元素/n");
else
{
temp=p->next;
p->next=temp->next;
free(temp);
printf("删除成功/n");
}
}
}
void lookfor(cir_list *the_head)
{
int target;
printf("请输入需要查找的数据:");
scanf("%d",&target);
cir_list *temp;
int j=1;
temp=the_head;
while(1)
{
if(temp->date!=target&&temp->next!=the_head)
{
temp=temp->next;
j++;
}
else break;
}
if(temp->next=the_head&&temp->date!=target)
{
printf("无此元素\n");
return;
}
else printf("%d",j);
}
void print_list(cir_list *the_head)
{
cir_list *temp=the_head;
for(;temp->next!=the_head;temp=temp->next)
{
printf("%d ",temp->date);
}
printf("%d",temp->date);
}
void free_list(cir_list *the_head)
{
cir_list *temp,*mid;
temp=the_head;
for(;temp->next!=the_head;temp=temp->next)
{
mid=temp;
temp=mid->next;
free(mid);
}
return;
} |
|