c语言实训中表插入的函数 用c语言编写表格( 三 )


}
int ListTraverse_L(LinkList L,int n)//链表的遍历
{
int i=0;
if(!L)return ERROR;
L=L-next;
while(L)
{
if(L-data=https://www.04ip.com/post/=n)return i;
L=L-next;
i++;
}
return FALSE;
}
int InverseSingleList_L(LinkList L)
{
if(!L-next||!L-next-next)//如果链表少于2个Node那么链表不需要改变顺序
return OK;
LNode *p,*q;
p=L-next;//第一次因为p是最后一个连接所以把p-next设为空
q=p-next;
p-next=NULL;
p=q;
while(p)
{
q=p-next; //用q去保留p后面一个Node;
p-next=L-next;
L-next=p;
p=q;
}
return OK;
}
int main()
{
int List[N];
LinkList L;
int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t*1.创建一个顺序表.........(1)*\n");
printf("\t\t*2.在顺序表中查找元表.........(2)*\n");
printf("\t\t*3.在顺序表中插入元表.........(3)*\n");
printf("\t\t*4.在顺序表中删除元表.........(4)*\n");
printf("\t\t*5.退出.........(5)*\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
ch=getchar();
switch(ch)
{
case '1':
printf("\n请输入十个元素");
CreatList_L(L);
for(length=0;lengthN;length++)
{
scanf("%d",List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n创建成功!");
getchar();
break;
case '2':
scanf("%d",List[0]);
if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]));
else printf("不存在该元素");
getchar();
break;
case '3':
scanf("%d%d",length,List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n无效输入,请重新选择...:");
getchar();
break;
}
}while(exit!='y'exit!='Y');
}
C语言数组中插入元素的函数voidinsert( int a[ ], intn, intnumber )
{
for (int i=0;in;i++)
{
if (a[i]number)
continue;
else
{
for (int j=n;ji;j--)
{
a[j]=a[j-1];
}
a[i]=number;
break;
}
}
if (i==n)
a[i]=number;
}
c语言链表插入一个新节点的函数问题首先,主函数中,“请输入插入c语言实训中表插入的函数的数据”那里scanf应该是b,这是引发崩溃的原因 。
其次,insert函数的目的应该是想插入数据后仍是有序链表 。但你的insert函数逻辑太乱 , 有些不必要的判断,我修正了你的代码,贴给你看看 。(虽然你insert是想保证有序,但你在创建的时候没有保证有序,所以最终结果不一定是有序 。例如,创建 1,5,2,插入3,最后输出的是 1,3,5,2)
代码修改c语言实训中表插入的函数:
scanf("%d", b);
重写了insert函数,简化逻辑;
动态分配的内存记得释放,增加freeNode释放空间
#include stdio.h
#include stdlib.h
struct link
{
int data;
struct link *next;
};
struct link *add(struct link *head);//创建链表
void display(struct link *head);//输出数据
struct link *insert(struct link *head, int b); //插入新节点
void freeNode(struct link *); //释放空间
int main()
{
char c;