1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef int DataType; 4 typedef struct node{ 5 DataType data; 6 struct node *next; 7 }LinkNode,*LinkList; //LinkNode是JAVA中链表结点,此类可以存放int、long、float、double、byte、short、String、StringBuffer类型的数据 8 //定义单链表 9 void initList(LinkList &first){ 10 first=(LinkNode*)malloc(sizeof(LinkNode)) //创建头结点 11 if(!first){ 12 printf("存储分配错误!\n"); 13 exit(1); // (exit(1)表示异常退出. exit(0)表示正常退出) 14 } 15 first->next=NULL; //置空 16 } 17 //初始化单链表 18 int Length(LinkList &first){ 19 LinkNode *p=first->next; 20 int count=0; 21 while(p!=NULL){ 22 p=p->next; 23 count++; 24 } 25 return count; 26 } 27 //计算表的长度,返回count 28 LinkNode *Search(LinkList &first,DataType x){ 29 LinkNode *p=first->next; 30 if(p!=NULL&&x!=p->data){ 31 p=p->next; 32 return p; 33 } 34 return NULL; 35 } 36 //按值查找,返回该结点地址,否则返回NULL 37 LinkList *Locate(LinkList &first,int i){ 38 if(i<0) 39 return NULL; 40 LinkNode *p=first; 41 int k=0; //k用作结点计步 42 while(p!=NULL&&k<i){ 43 p=p->next; 44 k++; 45 } 46 return p; 47 } 48 //查找第i个结点,返回该结点的地址,否则返回NULL 49 int Insert(LinkList &first,int i,DataType x){ 50 LinkNode *p=Locate(first,i-1); //定位在第i-1个结点 51 if(p==NULL) 52 return 0; 53 LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); 54 if(s==NULL){ 55 printf("存储分配错误!\n"); 56 exit(1); 57 } 58 } 59 //将新元素插入在第i个位置,如i不合理返回NULL,否则返回1 表示插入成功 60 61 62
今日小结:今天学习了单链表的定义、初始化以及计算表的长度、按值查找和插入 在课上并不是很清晰 课后自己敲了代码 又去查了一下不太清晰的点之后 理解了很多 时间关系 明天再探究删除和赋值 应该跟顺序表相似
原文地址:https://www.cnblogs.com/smyhhh/p/10674446.html
时间: 2024-10-07 15:14:17