69,371
社区成员
发帖
与我相关
我的任务
分享
#define ElemType int
typedef struct node{
ElemType data;
struct node *next;
}Lnode;
void outline(Lnode *);
void create();
void insert(Lnode *h,ElemType x,ElemType y);
void ldelete(Lnode *h,ElemType x);
Lnode *p,*q,*s,*head;
int main(){
int i,x,y,cord;
do{
printf("\n 主菜单 \n");
printf("\n 1 建立线性表 \n");
printf("\n 2 插入一个元素 \n");
printf("\n 3 删除一个元素 \n");
printf("\n 4 结束程序 \n");
printf("-----------------\n");
printf("请输入您的选择(1,2,3,4)");
scanf("%d",&cord);
switch(cord){
case 1:{
create();
outline(head);
}
break;
case 2:{
printf("\n x,y=? 注意用逗号分隔");
scanf("%d%d",&x,&y);
insert(head,x,y);
outline(head);
}
break;
case 3:{
printf("\n 请输入删除的位置 i: ");
scanf("%d",&i);
ldelete(head,i);
outline(head);
}
break;
case 4:exit(0);
}
}while(cord<=4);
return 0;
}
void create(){
ElemType x;
Lnode *ptr;
head=(Lnode *)malloc(sizeof(Lnode));
head->next=NULL;
p=head;
printf("\n x=? ");
scanf("%d",&x);
while(x!=-999){
ptr=(Lnode *)malloc(sizeof(Lnode));
ptr->data=x;
ptr->next=NULL;
p->next=ptr;// 我的问题在这里,为什么这里head->next=p->next?不明白,为什么会自动插到head里面去
p=ptr;
printf("\n x=? ");
scanf("%d",&x);
}
}
void outline(Lnode *h){
p=h->next;
printf("\n ");
while(p!=NULL){
printf(" data=%4d",p->data);
p=p->next;
}
printf("\n 输出结束\n\n");
}
void insert(Lnode *h,ElemType x,ElemType y){
s=(struct node*)malloc(sizeof(struct node));
s->data=y;
q=h;
p=h->next;
while(p!=NULL&&p->data!=x){
q=p;
p=p->next;
}
q->next=s;
s->next=p;
}
void ldelete(Lnode *h,ElemType x){
p=h;
while(p->next!=NULL&&p->next->data!=x){
p++;
}
if(p->next==NULL){
printf("\n x 不存在 !");
}else{
q=p->next;
p->next=q->next;
free(q);
}
}
ptr=(Lnode *)malloc(sizeof(Lnode));//新建一个结点
ptr->data=x;//存入数据
ptr->next=NULL;//新结点指针置空
p->next=ptr;//p为链表原来最后的一个结点,现在在p的后面接上新结点,则ptr是新的最后结点
p=ptr;//p指向ptr,p成为链表最后的一个结点