三、数据结构:线性表-单链表
1、单链表是由一个一个的节点组成的,每一个节点包括两部分:数据和指向下一个节点的指针。
一个单链表包括:第一个节点、中间节点、尾节点
永远有一个指针指向第一个节点,这个指针就用来表示这个单链表。
第一个节点可以是一个没有数据的节点,称为头节点,头节点后的一个节点才开始存放数据叫做首元节点。当然也可以没有头节点,第一个节点就是首元节点。
2、声明一个节点
typedef struct Link{ char data; //数据 struct Link *next; //指向下一个节点的指针 }link;
3、初始化一个有头节点的单链表,内容为1,2,3,4,5.
正在上传…
link * initLink2(){ link *p; link *head =(link*)malloc(sizeof(link)); head->next = NULL; head->data = NULL; p = head; for(int i =1;i<6;i++){ link * a=(link*)malloc(sizeof(link)); a->data = i; a->next = NULL; head->next = a; head = a; } return p; }
4、初始化一个没有头节点的单链表。
link * initLink(){ link * p; link *head = (link*)malloc(sizeof(link)); head->data =1; head->next = NULL; p = head; for(int i = 2;i<6;i++){ link *a = (link*)malloc(sizeof(link)); a->data = i; a->next = NULL; head->next = a; head = head->next; } return p; } void displayLink(link *p){ link *tmp = p; while(tmp){ printf("%d ",tmp->data); tmp = tmp->next; } printf(" "); } int main(){ link *p = initLink2(); displayLink(p); return 0; }
5、往单链表中插入一个节点
link *insertLink(link *p,int data,int pos){ link *tmp =p; int i = 0; while(tmp){ if(i==pos-1){ link *new = (link*)malloc(sizeof(link)); new->data = data; new->next = tmp->next; tmp->next = new; return p; } tmp = tmp->next; i++; } printf("pos error "); return p; }
6、删除一个节点
link *dropLink(link *p,int pos){ link *tmp = p; link *drop; int i = 0; while(tmp){ if(i == pos-1){ drop = tmp->next; tmp->next = drop->next; free(drop); return p; } tmp = tmp->next; i++; } printf("pos error"); return p; }
7、更新一个节点
link *updateLink(link*p,int pos,int data){ link *tmp = p; int i=0; while(tmp){ if(i == pos){ tmp->data = data; return p; } tmp = tmp->next; i++; } printf("pos error "); return p; }
8、查找节点
int selectLink(link*p,int data){ link *tmp =p; int pos=0; while(tmp){ if(tmp->data ==data) return pos; pos ++; tmp = tmp->next; } printf("not in link "); return -1; }
9、总结:(1)单链表要注意的就是表示这个单链表的指针p永远指向第一个节点。不管要怎么遍历,都可以重新声明一个临时指针在链表中滑动。
(2)在插入节点的时候为什么不考虑如果插入的位置是第一个,要把p指针也指向新节点。那是因为以上代码做的操作都是考虑有头节点情况,如果没有头节点的链表,在擦汗如时就要考虑。
上一篇:
IDEA上Java项目控制台中文乱码