使用链表的基本操作
来源:互联网 发布:条码打印软件免费版 编辑:程序博客网 时间:2024/06/04 01:17
//动态链表#include <stdlib.h>typedef struct node{ int a; struct node *next;}NODE,*PNODE;//构建链表PNODE creat_(){ PNODE head,q,p;//定义头指针head,代替头指针球q(头指针不能动) head=(PNODE)malloc(sizeof(NODE));//分配内存给head if(head==NULL) { printf("分配内存失败"); } head->next=NULL; int num,num_,i; scanf("%d",&num); q=head;//代替头指针q for(i=0;i<num;i++) { p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它 scanf("%d",&num_); p->a=num_; q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针) q=p;//q指针也指向p指针指向的结点 } q->next=NULL; return head;}//遍历void traverse(PNODE head){ PNODE q; q=head->next;//注意不能写q=head,应该让q指向第一个元素 while(q!=NULL) { printf("%d ",q->a); q=q->next; }}//判断空链表void empty(PNODE head)//头指针{ if(head->next==NULL) { printf("空"); } else { printf("不空"); }}//测试当前节点是不是链表末尾void islast(PNODE head){ if(head->next==NULL) { printf("是"); } else { printf("不是"); }}//寻找一个数字在链表中的位置PNODE find(PNODE head,int s){ PNODE q; int pos=1;//记录在链表的位置 q=head->next; while(q!=NULL) { if(q->a==s) { printf("%d",pos); break; } else { q=q->next; pos++; } } return q;//返回地址}//寻找一个数字的上一个地址PNODE find_(PNODE head,int s){ PNODE q=head->next; while(q->next!=NULL && q->next->a!=s) { q=q->next; } return q;}//删除void del(PNODE head,int s)//不用返回指针{ PNODE q; q=find_(head,s); q->next=q->next->next;}//插入void insert(PNODE head,int s){ PNODE q=head; PNODE pnew=(PNODE)malloc(sizeof(NODE));//创建一个新杰蒂娜 pnew->a=s;//把插入的数据存入新节点 pnew->next=q->next;//新节点指向下一个结点 q->next=pnew;//上一个节点指向新节点}int lengh(PNODE head)//求链表长度{ int i=0; PNODE q=head->pnext; while(q!=NULL) { i++; q=q->pnext; } return i;}int main(){ PNODE head,q,p; head=creat_(); traverse(head); q=find_(head,4);//寻找4的前一个数字的位置 del(head,4);//删除4 p=head->next; printf("%d",p->a); insert(p,5);//插入一个数字 while(p!=NULL) { printf("%d ",p->a); p=p->next; } return 0;}
#include <iostream>#include <stdlib.h>#include <stdbool.h>#include "normal.h"using namespace std;typedef struct node{ int num; struct node* pnext;}lnode,*linklist;void init(linklist &head){ head=(linklist)malloc(sizeof(lnode)); head->pnext=NULL;}void create(linklist &head,int n){ linklist q,p; q=head; int i,data; for(i=1;i<=n;i++) { cin>>data; p=(linklist)malloc(sizeof(lnode)); p->num=data; p->pnext=NULL; q->pnext=p; q=p; } q->pnext=NULL;}void traverse(linklist head){ linklist q=head->pnext; while(q!=NULL) { cout<<q->num; q=q->pnext; }}bool empty(linklist head){ if(head->pnext==NULL) return true; else return false;}linklist findelem(linklist head,int e){ linklist q=head->pnext; while(q!=NULL && q->num!=e) { q=q->pnext; } return q;}int locatelem(linklist head,int i,int &e){ int j=1; linklist q=head->pnext; for(j=1;j<i;j++) q=q->pnext; if(q==NULL) return ERROR; else e=q->num; return OK;}int insert(linklist &head,int i,int e){ int j=0; linklist q=head,p; while(j<i && q!=NULL) { q=q->pnext; j++; } if(q==NULL) return OVERFLOW; p=(linklist)malloc(sizeof(lnode)); p->num=e; p->pnext=q->pnext; q->pnext=p; return OK;}int delete_(linklist &head,int i){ int j=0; linklist q=head,p; while(j<i-1 && q!=NULL) { q=q->pnext; j++; } if(q==NULL) return OVERFLOW; p=q->pnext; free(p); q->pnext=q->pnext->pnext; return OK; }int main(){ int t; linklist head; init(head); create(head,10); delete_(head,6); traverse(head);}
0 0
- 使用链表的基本操作
- 使用C++实现链表的基本操作
- MySql的基本使用,数据库,表,数据的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- MYSQL视图的学习笔记
- runtime的知识
- Codevs 1001 舒适的路线 2006年 NOIP全国联赛提高组
- python 查询 ip 对应注册公司
- Sencha Test 使用示例 – Part 1
- 使用链表的基本操作
- LCA在线算法ST&&DFS->POJ1330&&POJ1470
- Zookeeper
- 最小圆覆盖算法
- 算法总结之最小生成树
- Java中的阻塞队列
- (四)Lua语句
- redis配置文件的那些事儿
- 线性回归问题简单实现matlab