回复 楼主 飞机火车
这个是我整理三楼后完整的代码,加了两处,在表情位置
版主是典型的面向过程思想,思路很清晰,值得学习的,代码没有错误,运行正确
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>//这个应该加上,否则bool将出现错误
#define N 6
typedef struct data
{
int value;
struct data* next;
}tdata,*pdata;
pdata linkcre(void)
{
pdata head,pfirst,psecond;
int cr[6]={21,3,15,27,11,18};
pfirst=(pdata)malloc(sizeof(tdata));
head=pfirst;
head->value=0;
psecond=pfirst;
int i;
for(i=0;i<N;i++)
{
pfirst=(pdata)malloc(sizeof(tdata));
pfirst->value=cr[i];
pfirst->next=NULL;
psecond->next=pfirst;
psecond=pfirst;
}
return head;
}
void prnlist(pdata head)
{
pdata pfirst=head->next;
while(pfirst!=NULL)
{
printf("%d ",pfirst->value);
pfirst=pfirst->next;
}
printf("\n");
}
void searchlistp(pdata head,int pos)
{
pdata pfirst=head->next;
int i=0;
while(pfirst!=NULL)
{
i++;
if(i==pos) break;
pfirst=pfirst->next;
}
if(i<pos) printf("无此序列号 你输入的数值大概有些大\n");else
printf("%d \n",pfirst->value);
}
void searchlistv(pdata head,int value)
{
bool flag=false;
pdata pfirst=head->next;
while(pfirst!=NULL)
{
if(pfirst->value==value)
{
flag=true;
break;
}
pfirst=pfirst->next;
}
if(!flag) printf("你输入的数值不存在于链表之中\n");else printf("%d \n",pfirst->value);
}
void inslist(pdata head,int pos,int value)
{
pdata pfirst=head->next;
int i=0;
while(pfirst!=NULL && pos>0)
{
i++;
if(i==pos) break;
pfirst=pfirst->next;
}
pdata ptmp;
if(pos==0) ptmp=head->next; else ptmp=pfirst->next;
pdata pins=(pdata)malloc(sizeof(tdata));
if(pos==0) head->next=pins;else pfirst->next=pins;
pins->value=value;
pins->next=ptmp;
}
void dellist(pdata head,int pos)
{
if(pos==0)
{
printf("根节点不可删除\n");
return;
}
pdata pfirst=head->next;
pdata ptmp=pfirst;
int i=0;
while(pfirst!=NULL && pos>1)
{
i++;
if(i==pos) break;
ptmp=pfirst;
pfirst=pfirst->next;
}
if(pos==1) head->next=head->next->next;
else
{
ptmp->next=pfirst->next;
free(pfirst);
} //这里是新加的,把删除的部分的内存释放
}
int main(int argc, char* argv[])
{
pdata
head;
head=linkcre();
prnlist(head);
inslist(head,0,56); //测试头部插入
prnlist(head);
inslist(head,5,777);
//测试中间插入
prnlist(head);
inslist(head,8,99999);
//测试尾部插入
prnlist(head);
dellist(head,1);
prnlist(head);
printf("请输入待查找的序号:");
int pos=0;
scanf("%d",&pos);
searchlistp(head,pos);
printf("请输入待查找的值:");
int value=0;
scanf("%d",&value);
searchlistv(head,value);
return 0;
}