#include <stdio.h> #define len sizeof(struct a) #include <malloc.h>
struct a {char lk; struct a *next ; };
main() {struct a *head,*p,*q,*s; int i; char ch; head=p=(struct a *) malloc(len); for(i=1;i<=26;i++) { (p->lk)=('a'+i-1); p->next=(struct a *)malloc(len); p=p->next;
} p->next=NULL;
p=head; while (p->next != NULL)
{ printf("%c ",p->lk); p=p->next; } /* printf("\n"); */
q=p=head; printf("\ninput deleted letter:"); scanf("%c",&ch); while(ch != '0') { q=p=head;
while(p->lk != ch && p->next != NULL) {q=p; p=p->next;} if(p==head) { head=head->next;free(p); } else { if(p->lk == ch)
{ q->next=p->next; free(p) ; } else printf("can't find it"); }
q=p=head; printf("\n"); while (p->next != NULL)
{ printf("%c ",p->lk); p=p->next; } /* printf("\n"); */
q=p=head;
printf("\n2:input deleted letter"); fflush(stdin); scanf("%c",&ch); }
p=head; while(p->next != NULL) {printf("%c",p->lk); p=p->next;}
q=p=head; printf("\ninput insert letter"); /*insert */ scanf("%c",&ch); 这句为什么没执行啊``````为什么插入只能插一个```急`` fflush(stdin); while(ch != '0') { q=p=head; while(p->lk < ch && p->next != NULL) { q=p; p=p->next;} if(p==head) { s=(struct a *) malloc(len); s->lk=ch; s->next=head; q=p=s; }
else { if (p->lk == ch) printf("inserted is exist"); else {s=(struct a *) malloc(len); s->lk=ch; s->next=p; q->next=s; q=p=head;} }
while(p->next != NULL) {printf("%c",p->lk); p=p->next;} p=head; printf("\n2insert a letter");
scanf("%c",&ch); fflush(stdin);
}
}
----------------解决方案--------------------------------------------------------
删除操作没问题`````
就是那个 scanf 没执行`````
----------------解决方案--------------------------------------------------------
我的插入操作也有问题```
大家给修修`
----------------解决方案--------------------------------------------------------
现在就剩下插入操作的了```````
那个scanf 函数的好了```
----------------解决方案--------------------------------------------------------
怎么没人啊```` #include <stdio.h> #define len sizeof(struct a) #include <malloc.h>
struct a {char lk; struct a *next ; };
main() {struct a *head,*p,*q,*s; int i; char ch; head=p=(struct a *) malloc(len); for(i=1;i<=26;i++) { (p->lk)=('a'+i-1); p->next=(struct a *)malloc(len); p=p->next;
} p->next=NULL;
p=head; while (p->next != NULL)
{ printf("%c ",p->lk); p=p->next; } /* printf("\n"); */
q=p=head; printf("\ninput deleted letter:"); scanf("%c",&ch); while(ch != '0') { q=p=head;
while(p->lk != ch && p->next != NULL) {q=p; p=p->next;} if(p==head) { head=head->next;free(p); } else { if(p->lk == ch)
{ q->next=p->next; free(p) ; } else printf("can't find it"); }
q=p=head; printf("\n"); while (p->next != NULL)
{ printf("%c ",p->lk); p=p->next; } /* printf("\n"); */
q=p=head;
printf("\n2:input deleted letter"); fflush(stdin); scanf("%c",&ch); }
p=head; while(p->next != NULL) {printf("%c",p->lk); p=p->next;}
q=p=head; printf("\ninput insert letter"); /*insert */ 就看这个插入的```````````````````插入的判断条件大家看看错没(蓝字是) fflush(stdin); scanf("%c",&ch);
while(ch != '0') { q=p=head; while(p->lk < ch && p->next != NULL) { q=p; p=p->next;}
if(p==head) { s=(struct a *) malloc(len); s->lk=ch; s->next=head; p=s; }
else { if (p->lk == ch) { printf("inserted is exist"); } else {s=(struct a *) malloc(len); s->lk=ch; s->next=p; q->next=s; p=head;}
} printf("\ntest %c\n",p->next->lk);
while(p->next != NULL) {printf("%c",p->lk); p=p->next;} p=head; printf("\n2insert a letter");
fflush(stdin); scanf("%c",&ch);
}
}
----------------解决方案--------------------------------------------------------
大家都扫墓去了,怎么还会有人来?
今天是没人的了.
我也没心情做了,那个累呀.如果需要的话把题目搬上来,我帮你做完就得了
----------------解决方案--------------------------------------------------------
首先谢谢你` 别人做的毕竟不是自己做的```` 只会骗了自己````` 我现在就是不知道插入 判断条件是什么 a-->b-->c-->d-->e-->f-->---------------z 如果 是 while(p->lk < ch && p->next != NULL) { q=p; p=p->next;} 就得考虑 b-->c-->d-->e-->-------->z 现在我不知道该怎么插入的条件(即while的) 我的程序没 头节点 麻烦大家想想,能有什么解决的方法```````````
----------------解决方案--------------------------------------------------------
有志气!
你想在链表的哪里插入你的单元?
表头还是表尾?
还有,我想知道你是不是理解了链表是如何插入的.一个单链表插入会遇到几种情况?
----------------解决方案--------------------------------------------------------
插入的位置是不固定的`````由用户输入
比如说把
这时的线形表是
a-->b-->c-->------>z
如果插入 c 的话就不能插
如果插入a 的话,也不能
。
在用户删除了多个字母后,如
e-->f-->g
就剩下这三个 了```
这时在插入的话,如果输入 a ,插入后为 a-->e-->f-->g
如果输入z, 插入后为 e-->f-->g-->z
----------------解决方案--------------------------------------------------------
我想可以这样去实现你这个程序
1.判断要插入的单元的字符ch在链表中是否已经存在,如果存在则不插入
这个可以用遍历查询函数来作
struct character *search(char ch)
{
struct character *p;
p=head;
while(p->next!=NULL)
if(p->c == ch) return p;
else p=p->next;
return NULL;
}
这个函数的作用我想你自己都可以看出来吧,找到链表中有一个单元的字符与ch相同
则返回这个单元的地址,如果找不到则返回NULL
于是我们可以通过这个函数来判断是否要插入的单元的字符已经存在于链表之中.
2.如果要插入的单元的字符不存在链表当中,当然我们可以进行插入操作了.
思想如下:
(A.)
插入的字符是链表的第一个单元(也就是说插入'a'的情况)
b->c->d->...插入a成为a->b->....
那么我们就给a=malloc(...);分配空间之后head=a;a->next=b;就了帐了.
这种情况是最最简单的.
(B.)
插入的字符是链表的非第一个单元
a->b->d....插入c成为a->b->c->d
这个时候就比较麻烦了.
我们要在b之后插入,首先我们现得遍历查询找到b所在的位置(用search()函数)
然后
c=malloc(...);
temp=b->next;
b->next=c;
c->next=temp;
temp是临时操作指针.
在网络上我也只能讲得这样了,剩下的只能靠你自己去悟了.
----------------解决方案--------------------------------------------------------