关于c链表的问题,高手帮忙看看是什么问题
这是创建一个字符串链表的工程,插入字符串同时升序排序 用的是dev c++。gcc编译器以下程序已经编译通过可以运行,但没有达到预想结果;
此工程包涵3个文件 main1.c strin.c list.h
main1.c:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "liste.h"
main()
{
char p[10];
char *s;
int i;
string *head,*star;
head=(string*)malloc(sizeof(string));
if(head==NULL)
{
printf("error");
exit(1);
}
head->p1=NULL;
head->string1="hello";
do{
printf("input:");
gets(p);
puts(p);
s=p;
i=insert3(&head,s);
printf("i=%d\n",i);
}while(i!=0&&strlen(p)!=0);
printf("over\n");
do{
printf("string=%s\n",head->string1);
head=head->p1;
}while(head!=NULL);
system("pause");
}
strin.c
/*字符串链表排序插入*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "liste.h"
int insert3(string **rootb,char *ps)
{
string *h;
string *new1;
int x;
printf("1 ");
while((h=*rootb)!=NULL&&(x=strcmp(h->string1,ps))<0)/*选择正确的位置插入*/
{
printf("x=%d\n",x);
printf("h->string1=%s\n",h->string1);
printf("ps=%s\n",ps);/*以上3条语句为测试语句*/
rootb=&h->p1;
}
if(x==0)
{
printf("3 \n");/*测试语句*/
return 0;
}
new1=(string*)malloc(sizeof(string));
if(new1==NULL)
return 0;
new1->string1=ps;
printf("sting=%s",new1->string1);/*测试语句*/
/*插入*/
new1->p1=h;
*rootb=new1;
return 1;
}
liste.h
typedef struct str{
struct str *p1;
char *string1;
}string;
typedef struct node{
struct node *link;
string *str1;
char x;
}list;