链表的基本操作
来源:互联网 发布:windows xp 键盘鼠标 编辑:程序博客网 时间:2024/06/03 20:24
一、链表的数据结构
(1)顺序存储
int link[10];
(2) 链式存储结构
typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //LinkList为结构体类型的指针,可以直接定义变量,比如LinkList p
二、链表的常见的基本操作
(1) 链表的创建
头插法(按照节点的逆序,每插入一个节点都在链表的头部)
typedef struct Lnode { ElemTyle date; struct Lnode*next; }Lnode;Lnode*CreatListFront(){linklist *p,*head;head=(LNode*)malloc(sizeof(LNode));head->next=null;while(1){ scanf("%d",&data); p->data=data; p->next=head->next; head->next=p;}return head;}
尾插法(每插入一个元素,插到链表的尾部)
Lnode *CreateListRear(){ linklist *p;*head;*q; head=(LNode*)malloc(sizeof(Lnode)); head->next=null; while(1) { scanf("%d",&data); q=(LNode*)malloc(sizeof(Lnode)); q->data=data; q->next=p->next;// q->next=null; p->next=q;//Q的值赋插在P的后面 p=q;//P指向链表链尾的节点 }return head;}
(2)链表的插入
void Insert(Linklist&L,int i,ElemType e){ int j=0; linklist p; p=l; while(p!=null&&j<i-1)//查找第I-1个节点P { p=p->next; ++j; } if(!p||j>i-1) return error; s=(LNode*)malloc(sizeof(Lnode)); s->data=e; s->next=p->next; p->next=s;}
**(3)链表的删除
void Delete(Linklist&L,int i){int j=0;linklist p;p=l;while(p!=null&&j < i -1)//查找第I-1个节点P{p=p->next;++j;}if(!p||j > i-1) return error;q=(LNode*)malloc(sizeof(Lnode));q=p->next;p->next=q->next;free(q);}
(3)查找
void FindListElement(Linklist&l, ElemType e){linklist *p=l->next;int i;whils(p->next!=null){if(p->data==e)return i;}p=p->next;i++;}
(4) 插入(在第I个位置之前插入元素e)**
void Insert(Linklist&l, int i,ElemType e){ linklist *p; s=(LNode*)malloc(sizeof(LNode)); p=l; int j=0; while(p!=null&&j<i-1) { p=p->next; j++; } if(p==null||j>i-1) return error; s->data=e; s->next=p->next; p->next=s;}
(5)判断单链表是否为空
int LinklistIsEmpty(linklinst&l){ Lnode *p; p=l; if(p->next==null) return 0; else return 1;}
(6) 单链表的反向逆置(1,2,3逆置为3,2,1,)
1.三个指针的方法遍历逆转
void Reservelinklist(Node *head){ node*p,q,r; if(head->next==null||head==null);return error; p=head; q=head->next; head->next=null;//旧的头指针是新的尾指真,所以next为空 while(q) { r=q->next;//R先保留下一步要处理的指针 q->next=p;//p q交换指针方向 p=q; q=r; } head=p;//最后q必然是指向空的,所以P作为头结点 return head;}
方法2 从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
Node* ReverseList(Node* head) { Node *p,*q; p=head->next; while(p->next!=NULL) //在这个循环过程中p所指的元素一直是不变的 { q=p->next; p->next=q->next; q->next=head->next; head->next=q; } p->next=head; //相当于成环 head=p->next->next; //新head变为原head的next p->next->next=NULL; //断掉环 return head; }
(7)**链表的遍历
反向遍历单链表**
void f(LNode *l){ if(l->next==null) { cont<<l->data; } else { f(l->next); cont<<l->data; }}
0 0
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- HDoj2391-Filthy Rich-DP
- UVALive - 3644 X-Plosives 并查集
- 欧拉函数
- 萧夜迷离
- php 让浏览器格式化显示XML
- 链表的基本操作
- iOS UIFont 字体大全
- Shell常用命令整理
- 一道超经典易错题
- 清水言志
- lightOJ1123 --Trail Maintenance(最小生成树+删边)
- 第一个ajax小demo
- STM32学习笔记-Flash做为存储器储存数据
- 用户画像