单链表的操作
来源:互联网 发布:php 多图片上传插件 编辑:程序博客网 时间:2024/06/05 11:49
1、单链表:线性链表
插入:根据插入的位置,分3种,第一个结点前,最后一个结点后,插入在中间
删除:也同样分为3种,删除第一个结点,删除最后一个结点,删除中间的结点
#include <iostream>using namespace std;typedef struct LinkNode{int data;struct LinkNode *next;}LinkNode;//链表的创建LinkNode * CreateLink(){int i;LinkNode *head,*ptr,*p;head = (LinkNode*)malloc(sizeof(LinkNode)); //分配内存if(!head){printf("内存分配失败。");exit(1);}printf("请输入第1个数据:");scanf("%d",&head->data); head->next = NULL;ptr = head;for(i=1;i<5;i++){p = (LinkNode*)malloc(sizeof(LinkNode));if(!p){printf("内存分配失败!\n");exit(1);}printf("请输入第%d个数据:",i+1);scanf("%d",&p->data);p->next = NULL;ptr->next = p;ptr = ptr->next;}return head;}//查找链表结点LinkNode *FindNode(LinkNode *head,int num){LinkNode *ptr;ptr = head;while(ptr){if(ptr->data == num)return ptr;ptr = ptr->next;}return ptr;}//链表结点的插入LinkNode *InsertNode(LinkNode *head,LinkNode *ptr,int value){LinkNode *newnode = (LinkNode *)malloc(sizeof(LinkNode));if(!newnode) exit(1);newnode->data = value;newnode->next = NULL;if(ptr == NULL) //插入在表头{newnode->next = head;return newnode;}else{if(ptr->next == NULL) ptr->next = newnode;//插入在表尾else //插入在表中{newnode->next = ptr->next;ptr->next = newnode;}}return head;}//链表结点删除LinkNode * DeleteNode(LinkNode *head,LinkNode *ptr){LinkNode *pre; //指向前一结点if(ptr==head) //要删除的结点是头结点return head->next; //输出第二个结点的指针else{pre = head;while(pre->next!=ptr) //找要删除结点的前一个结点{pre = pre->next;}if(ptr->next==NULL) //要删除的结点是最后一个结点pre->next = NULL;elsepre->next = ptr->next;}free(ptr);//释放结点内存return head;}//链表输出void PrintNode(LinkNode *ptr){while(ptr!=NULL){printf("%d\t",ptr->data); //输出结点数据ptr = ptr->next;}printf("\n");}//链表的内存释放void FreeLinkNode(LinkNode *head){LinkNode *ptr;while(head!=NULL){ptr = head;head = head->next;free(ptr);}}void main(){int num,value;LinkNode *head,*ptr; //指向链表开始head = CreateLink(); //创建链表PrintNode(head); //输出链表printf("请输入要查找的数据:\n");scanf("%d",&num);ptr = FindNode(head,num);if(!ptr)printf("没有找到\n");else{printf("找到啦!\n请输入要插入的数据:\n");scanf("%d",&value);head = InsertNode(head,ptr,value);PrintNode(head); //输出链表}printf("请输入要查找并删除的数据:\n");scanf("%d",&num);ptr = FindNode(head,num);if(!ptr)printf("没有找到\n");else{printf("找到啦!\n");head = DeleteNode(head,ptr);PrintNode(head);}FreeLinkNode(head);system("pause");}
结果输出:
0 0
- 简单的单链表操作
- 单链表的基本操作
- 简单的单链表操作
- 单链表的基本操作
- 单链表的操作(C#)
- 单链表的操作
- 单链表的各种操作
- 单链表的操作实现
- 单链表的 操作
- 单链表的基本操作
- 单链表的一些操作
- 单链表的操作
- 关于单链表的操作
- 单链表的各种操作
- 单链表的常用操作
- 单链表的一些操作
- 单链表的一些操作
- 单链表的操作
- Android 不停旋转图片
- MySQL 笔记
- CSS基础知识点轨迹(二)
- Python3.x和Python2.x的区别
- 串口的中断和接收
- 单链表的操作
- JNI常用函数说明二
- 最大子段和问题(51NOD 1049)
- python学习笔记2
- 代码规范之在函数之前添加注释
- mxnet学习
- Log4j日志输出详细
- selenium-webdriver(python) (七)-----多层框架或窗口的定位
- Android源码编译出来的img如何运行起来