正文

(原创)数据结构之单链表2006-05-13 23:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/smile/14010.html

分享到:

数据结构之单链表
#include <stdio.h>
typedef struct node *linklist;
struct node {
 int data;
 linklist next; //定义一个链域
};

int main()
{
   char n;
   linklist head,p;
   head = 0; //表结点设为空
 printf("请输入一串字符,以回车结束!:\n");
 scanf("%c",&n);

 while(n!='\n'){
  p=(linklist)malloc(sizeof(linklist)); //申请内存空间
  p->data=n;    //输入的字符存放在data域里
  p->next=head;  //头插法单链表是这样转指针的
  head=p;
 scanf("%c",&n);
}
printf("你输入的字符串是:\n");
p=head; //输出前先让p指回表结点,就象数组回到首地址一样
while(p!=NULL) {
 printf("%c",p->data);
 p=p->next;
}
 getch();
 return 0;
}

头插法的单链表,它的输出是倒置数据,这是它的特点哦

尾插法:

#include <stdio.h>
#include <string.h>
typedefstruct node *linklist;
struct node {
  int data;
  linklist next;
};

length(linklist head) //求表的长度
{
  linklist p;
  int j = 0;
  p = head;
 while(p->next!=0) //算法思想:当链域next不为空时,说明都存放有数据,则占有空间
    { p = p->next;
 j++;
    }
return(j);
}

find_linklist(linklist head,char t) //查找
{
   linklist p;
   p = head; //先要一个数据类型是linklist的变量指向表结点
   int j = 0;
while((p->next!=0)&&(p->data!=t)) //当没有到表尾及所查找的字符不匹配则继续找
  {
    p = p->next;
    j++;
  }
  if(p->data==t) return(j);
  else return(0);
}

linklist simplelist()
{ linklist head,p,q;
 char n;
 head=(linklist)malloc(sizeof(linklist));
 p = head;
 scanf("%c",&n);
 while(n!='\n')
  {
 q=(linklist)malloc(sizeof(linklist));
 q->data = n;
 p->next = q;  //用工作指针q来实现尾插法
 p = q;
 scanf("%c",&n);
  }
 p->next = NULL;
 return(head);
}

int main()
{
 char n;
 int a, c, i = 0;
 linklist head,p;
 printf("请输入一串字符,按回车结束:\n");
 head=simplelist();
 a=length(head);
 p=head;
 while(p!=NULL) {
   printf("%c",p->data);
   p = p->next;
   i++;
}
printf("\n");
printf("链表的长度是:%d\n",a);
printf("请输入你要查找的某个字符:");
scanf("%c",&c);
a=find_linklist(head,c);
if(a!=0)
printf("你要查找的字符第一次出现的位置在第%d个位置",a);
else printf("没有这个字符!");
getch();
return 0;
}

 

阅读(3951) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册