链表问题。本来想丰衣足食的,哎 。。。。
#include<stdio.h>#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct string
{
char ch;
struct string *nextptr;
};
int num = 0;
struct string *creat(struct string *h) {
struct string *p1, *p2;
p1 = p2 = (struct string*)malloc (sizeof (struct string));
if (p2 != NULL) {
scanf("%c", &p2->ch);
p2->nextptr= NULL;
}
while (p2->ch != '\n') {
num++;
if (h == NULL) {
h = p2;
}
else
p1->nextptr = p2;
p1 = p2;
p2 = (struct string*)malloc (sizeof (struct string));
if (p2 != NULL) {
scanf("%c", &p2->ch);
p2->nextptr=NULL;
}
}
return h;
}
struct string *del(struct string *h, char *str) {
struct string *p1, *p2;
p1 = h;
if(p1 == NULL) {
printf("the list is null \n");
return h;
}
p2=p1->nextptr;
if(!strcmp(p1->ch, str)) {
h=p2;
return h;
}
while(p2!=NULL) {
if (!strcmp(p2->ch, str)) {
p1->nextptr=p2->nextptr;
return h;
}
else
{
p1 = p2;
p2 = p2->nextptr;
}
}
return h;
}
void print(struct string *h) {
struct string *temp;
temp = h;
while (temp != NULL) {
printf("%c", temp->ch);
temp = temp->nextptr;
}
}
void main() {
struct string *head;
char *a;
head = NULL;
printf("请输入一行字符: \n");
head = creat(head);
print(head);
printf("%d", num);
printf("please enter del: \n");
scanf("%c", &a);
del(head, a);
print(head);
printf("%d", num);
}
主函数中指针变量a没有赋值,指向了不确定的内存单元,因此程序执行到后面报错了,scanf("%c", &a);这条语句不需要取址运算符。还有,在del函数中,判断一个字符是否相等,用了字符串的判断函数strcmp,这样的后果就是程序无法找到和输入字符拥有一样的值的结点,两个if语句分别改为if(p1->ch==*str)和if(p2->ch==*str)就行了,还有num变量用于统计链表中结点的数量,当del函数执行时,如果成功删除,应该需要减1吧,否则就没意义了。 北林之中 发表于 2013-12-15 19:22 static/image/common/back.gif
主函数中指针变量a没有赋值,指向了不确定的内存单元,因此程序执行到后面报错了,scanf("%c", &a);这条语句 ...
先谢谢了哥们 我先看看哦!
万分感谢! ryan0632 发表于 2013-12-22 20:04 static/image/common/back.gif
支持一下楼主
版主你出个主意吧 ryan0632 发表于 2013-12-23 10:18 static/image/common/back.gif
我只学过一点VB,派森和汇编,C方面完全不懂,你是我老师级的
好吧 您谦虚了 感谢楼主无私奉献!
页:
[1]