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

评论