数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
来源:互联网 发布:godaddy 域名优惠码 编辑:程序博客网 时间:2024/06/15 16:25
#include<stdio.h>#include<stdlib.h>typedef int DATATYPE;typedef struct node { DATATYPE data; struct node *next;}linklist;linklist *create_empty_linklist(){ linklist *head; head = (linklist *)malloc(sizeof(linklist)); head->next = NULL;//当前创建出来的节点后续没有其他节点 return head;}int insert_data_by_head(linklist *head,DATATYPE data){ linklist *temp; temp = (linklist *)malloc(sizeof(linklist)); temp->data = data;// 错误演示// head->next = temp;// temp->next = NULL; temp->next = head->next; head->next = temp; return 0;}int insert_data_by_tail(linklist *head,DATATYPE data){ linklist *p = head; linklist *temp; while(p->next != NULL) p = p->next; temp = (linklist *)malloc(sizeof(linklist)); temp->data = data; p->next = temp; temp->next = NULL; return 0;}int print_data(linklist *head){ linklist *p = head->next;//跳过头节点、头节点中没有数据 while(p != NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); return 0;}linklist *find_assign_data(linklist *head,DATATYPE data){ linklist *p = head->next; while(p != NULL) { if(p->data != data) p = p->next; else return p; }}linklist *find_data_by_num(linklist *head,int num){ linklist *p = head; int i = 1; if(num == 0) return head; while(p->next != NULL) { if(i <= num) { p = p->next; i ++; } else return p; }}int insert_data_anywhere(linklist *head,int post,DATATYPE data){ linklist *p; linklist *temp; p = find_data_by_num(head,post - 1);//目的是寻找post对应节点的前一个节点地址 temp = (linklist *)malloc(sizeof(linklist)); temp->data = data; temp->next = p->next; p->next = temp; return 0;}int delete_assign_post_data(linklist *head,int post){ //要删除一个元素,必须先获取它的前面节点的地址 linklist *p; p = find_data_by_num(head,post - 1); linklist *temp; if(p != NULL && p->next != NULL) { temp = p->next; p->next = temp->next; free(temp); temp = NULL; } return 0;}void exchange_data(linklist *head){ linklist *p = head->next; linklist *cur = p->next; p->next = NULL; while(cur != NULL) { p = cur->next; cur->next = head->next; head->next = cur; cur = p; }}void cleanup_linklist(linklist *head){ linklist *p = head; linklist *temp; while(p) { temp = p; free(temp); temp = NULL; p = p->next; }}int main(int argc, const char *argv[]){ linklist *head; head = create_empty_linklist(); int i; int data; for(i = 0;i < 5;i ++) { scanf("%d",&data);// insert_data_by_head(head,data);//头插法 insert_data_by_tail(head,data);//尾插法 }// printf("%d\n",head->next->data);// printf("%d\n",head->next->next->data);// print_data(head);// linklist *p; //查找元素值为4的节点首地址// p = find_assign_data(head,4);// printf("%d\n",p->data); //查找链表中第四个节点,头算第0个// p = find_data_by_num(head,4);// printf("%d\n",p->data); //如何事先按照任意位置插入元素// insert_data_anywhere(head,3,100);//在第三个位置插入元素100// print_data(head); //删除指定位置元素// delete_assign_post_data(head,3);//删除第三个位置的元素 // print_data(head); exchange_data(head); print_data(head);// cleanup_linklist(head);// print_data(head); return 0;}
阅读全文
0 0
- 数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
- 数据结构(一)单链表的基本操作(不带头节点)
- 数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作
- 数据结构-单链表节点的删除
- 数据结构-单链表节点的删除
- 数据结构(第二天)单向循环链表的创建,插入元素,(删除、查询元素跟单链表操作基本一致)
- Java单链表基本操作(六)--删除重复节点;
- 数据结构---单链表(建立,节点删除,节点插入)
- 数据结构---单链表(建立,节点删除,节点插入)
- javascript中dom节点操作(创建节点、增加节点、删除节点、克隆节点)
- 单链表创建,删除节点,添加节点,排序
- 数据结构 -- 单链表之删除节点
- jquery节点的操作 创建 删除 复制
- 带头节点的单链表的基本操作
- 单链表节点的删除
- jQuery之dom操作(查询、创建、插入、删除、复制节点)
- 数据结构之单链表——带有节点的单链表的创建、插入和删除(C/C++)
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- kubernetes使用中的一些问题
- Hadoop FileSystem
- 周志华《Machine Learning》学习笔记(17)--强化学习
- jsp笔记二
- js面向对象编程(1)--构造函数与new命令
- 数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
- Five-In-a-Row CodeForces
- .gitignore文件
- 检查和消除内存泄露
- 【spingmvc基础】springmvc的拦截器
- NAT技术和代理服务器
- IO流文件复制缓冲效率测试
- Prime Ring Problem(经典回溯法)
- KMP-hdu1711