数据结构之单链表
#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;
}
评论