当前位置: 代码迷 >> C语言 >> 大家帮我看看 26个字母删除的操作,怎么只能删除一个呀``???
  详细解决方案

大家帮我看看 26个字母删除的操作,怎么只能删除一个呀``???

热度:155   发布时间:2005-04-08 17:43:00.0
大家帮我看看 26个字母删除的操作,怎么只能删除一个呀``???

#include <stdio.h> #define len sizeof(struct a) #define NULL 0

struct a {char lk; struct a *next ; };

main() {struct a *head,*p,*q,*r; 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");

printf("input deleted zimu:");

scanf("%c",&ch); p=head; while(ch != '0') { if(head->lk==ch) {head=head->next; free(p); } else

while((p->lk != ch) && (p->next != NULL)) { q=p; p=p->next; }

if(p->lk==ch) {q->next=p->next; free(p);}

printf("\n"); p=head; while(p->next != NULL) {printf("%c ",p->lk); p=p->next; } printf("\n"); printf("input deleted zimu:"); scanf("%c",&ch);

} }

搜索更多相关的解决方案: next  struct  字母  head  

----------------解决方案--------------------------------------------------------
等等,请说清楚点,我根本就不明白你想实现什么而不能实现什么呀!

----------------解决方案--------------------------------------------------------

printf("input deleted zimu:");

scanf("%c",&ch); p=head; while(ch != '0') { if(head->lk==ch) {head=head->next; free(p); } else

while((p->lk != ch) && (p->next != NULL)) { q=p; p=p->next; }

if(p->lk==ch) {q->next=p->next; free(p);} 你这样当然只能删除一个了。因为他你输入一个他就删除一个。如果想全删除也行 ---------------------------------------- p=head; while(p){ q=p; p=p->next; free(q); } p=NULL; //这个可以不要。但是为了养成编程的良好习惯最好是加上。因为这样就不会造成空悬指针。 q=NULL; free(head);


----------------解决方案--------------------------------------------------------
而且你的删除好象很有问题。你的括号让人看了就头晕。。。。。
如果想删除一个就这样写吧
p=head;
while(p-&gt;next!=NULL&amp;&amp;p-&gt;next-&gt;data!=key) //key为你要删除的字符
p=p-&gt;next;
if(p-&gt;next==NULL) printf("没有找到你要删除的字符\n!");  //如果找到链表末尾都没找到你要删除的字符。那就输出提示语句
else {
  q=p-&gt;next;             //然后使q指向要删除的节点
  p-&gt;next=q-&gt;next;   //改变p指向的位置
  free(q);               //删除节点
q=NULL;             //不要造成空悬指针 。这个是我个人风格。。。。这样没那么容易出错
}


坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!------激情依旧
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2005-4-8 23:05:48的发言: 等等,请说清楚点,我根本就不明白你想实现什么而不能实现什么呀!
我想实现: 先 打印一行 a,b,c,d,e-----------------------,z LA 然后用 scanf 函数 接受一个字符 ,然后用这个字符 和LA比较,如果一样的话,就删除````
----------------解决方案--------------------------------------------------------
好好理解3-4楼的回复,
还有,你是在刚刚学习裢表吧,加油喔~


----------------解决方案--------------------------------------------------------
是的``

刚学链表,老师就让做 ,26个字母的插入和删除````
----------------解决方案--------------------------------------------------------
老是让我们做的26个字母的操作我先给大家说一下把`````````````````````````````````````````

首先 在 tc 的输出界面 先打印一行 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
                                                         input deleted letter:j

用户输入个 j 后                                a,b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
                                                           input deleted letter:a

                                                         b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
                                                         input deleted letter: 输入0后退出界面,回到编程窗口



----------------解决方案--------------------------------------------------------
恩,很遗憾,我下午还要去上课,只能很不负责任的和你说看3-4楼的贴子,其实我自己都没看.不过既然别人写了你就必需看看,1是尊重别人的劳动成果2也可以从中吸取经验.

等下午回来如果你还希望我能解答的话我一定会尽自己的一份薄力的.
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2005-4-9 12:08:07的发言: 恩,很遗憾,我下午还要去上课,只能很不负责任的和你说看3-4楼的贴子,其实我自己都没看.不过既然别人写了你就必需看看,1是尊重别人的劳动成果2也可以从中吸取经验. 等下午回来如果你还希望我能解答的话我一定会尽自己的一份薄力的.
好的,你先去上课````` 我会看别人给我回复地````` 谢谢你了`````哈```````` 链表我用着有点儿迷``````不知道怎么回事,我昨天做了一下午,也没做出来```````` 是不是苯啊`````
----------------解决方案--------------------------------------------------------
  相关解决方案