明天交作业 链表的删除子函数 能正确输出结果就是这个地方运行完之后自动终止了 实在看不出什么原因了
void shanchu(Linklist &L) //删除函数{
Linklist p;
Linklist q;
int i;
printf("请输入要删除的位置\n");
scanf("%d",&i); //删除第i个位置
p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next; //p为第i-1个位置的元素地址
++j;
}
{
q=p->next; //q为要删除元素的位置
p->next=q->next;
free(q);
}
}
全部程序 可以运行试试!
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*Linklist;
Linklist L;
int N;
void shuru(Linklist &L) //头插法 输入函数
{
int i;
printf("您要输入N个数\nN=");
scanf("%d",&N);
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
Linklist p;
for(i=0;i<N;i++)
{
p=(Linklist)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
int shuchu(Linklist &L) //输出函数
{
Linklist p;
int m;
p=L->next;
for(m=0;m<N;m++)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return 0;
}
int chazhao(Linklist &L) //查找函数
{
int i; //i 表示第i个元素
printf("请输入你要查找的数值\n");
scanf("%d",&i);
Linklist p;
p=L->next; //初始化 p指向第一个结点
int j=1; //j为计数器
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)return 0;
printf("你要查找的数值是%d\n",p->data);
return 0;
}
int charu(Linklist &L) //插入函数
{
int m,n;
printf("请输入您要插入的元素及其位置");
scanf("%d %d",&m,&n);
Linklist s;
s=(Linklist)malloc(sizeof(LNode));
s->data=m;
Linklist p; //查找位置n
p=L->next;
int j=1; //j为计数器
while(p&&j<n-1)
{
p=p->next;
j++;
}
if(!p||j>n-1)return 0; //现在的P就是要找的位置
s->next=p->next;
p->next=s;
N++;
return 0;
}
void shanchu(Linklist &L) //删除函数
{
Linklist p;
Linklist q;
int i;
printf("请输入要删除的位置\n");
scanf("%d",&i); //删除第i个位置
p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next; //p为第i-1个位置的元素地址
++j;
}
{
q=p->next; //q为要删除元素的位置
p->next=q->next;
free(q);
}
}[/color]
int jishu(Linklist &L) //计数函数
{
Linklist p;
p=L->next; //初始化 p指向第一个结点
int j=0; //j为计数器
while(p!=NULL)
{
p=p->next;
j++;
}
N=j;
printf("总共有%d个数值\n",N);
return 0;
}
int paixu(Linklist &L) //排序函数
{
int k;
Linklist m,q,p;
for(q=L->next;q;q=q->next) //q是要排的第几个数值 m始终是最小值的结点 q
{
m=q;
for(p=q;p;p=p->next) //循环找到data的最小值
if((m->data)>=(p->data))
{
m=p;
} //现在最小值是m->data
k=q->data; //交换的是值data
q->data=m->data;
m->data=k;
}
return 0;
}
int nizhi(Linklist &L)
{
Linklist p,Q,k;
Q=(Linklist)malloc(sizeof(LNode)); //创建头节点
Q->next=NULL;
p=L->next;
for(p;p;p=p->next)
{
k=(Linklist)malloc(sizeof(LNode));
k->data=p->data;
k->next=Q->next;
Q->next=k;
}
shuchu(Q);
return 0;
}
int main() //主函数
{
int i;
while(1)
{
printf("0--退出 1--输入 2--输出 3--查找 4--插入 5--删除 6--计数 7--排序\n8--逆置\n");
printf("请输入你的选择\n");
scanf("%d",&i);
switch(i)
{
case 0:exit(0);break;
case 1:shuru(L);break;
case 2:shuchu(L);break;
case 3:chazhao(L);break;
case 4:charu(L);break;
case 5:shanchu(L);break;
case 6:jishu(L);break;
case 7:paixu(L);break;
case 8:nizhi(L);break;
}
}
return 0;
}