单链表的简单实现
来源:互联网 发布:规则引擎 数据库设计 编辑:程序博客网 时间:2024/06/16 04:14
#include <iostream>#include <cstdio>#include <malloc.h>typedef int ElemType;typedef bool Status;using namespace std;typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;///逆位序输入n个元素的值,创建带有头结点的单链表void CreateList_L(LinkList &L,int n){ L=(LinkList)malloc(sizeof(LNode)); L->data=0; L->next=NULL; for(int i=n;i>0;i--) { LNode *p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=L->next; L->next=p; }}///正序输入n个元素的值,创建带有头结点的单链表void CreateListNor_L(LinkList &L,int n){ L=(LinkList)malloc(sizeof(LNode)); L->data=0; L->next=NULL; LNode *r=L; //最末尾的一个节点 for(int i=0;i<n;i++) { LNode *p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=r->next; r->next=p; r=p; }}///查找第i个位置的元素,并用e返回Status GetElem_L(LinkList L,int i,ElemType &e){ //L为带头结点的单链表 LNode *p=L->next; int j=1; while(p&&j<i) { p=p->next; j++; } if(!p||j>i) return false; e=p->data; return true;}///在第i个位置前面插入一个元素eStatus ListInsert_L(LinkList &L,int i,ElemType e){ LNode *p=L; int j=0; while(p&&j<i-1) { p=p->next; j++; } if(!p||j>i-1) return false; LNode *s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return true;}///删除第i个位置的元素eStatus ListDelete_L(LinkList &L,int i,ElemType &e){ LNode *p=L; int j=0; while(p&&j<i-1) { p=p->next; j++; } if(!p||j>i-1) return false; LNode *q=p->next; e=q->data; p->next=q->next; free(q); return true;}///单链表逆序,不需要创建一个新的链表void ListReverse_L(LinkList &L){ LNode *p=L->next; LNode *q=p->next; while(q) { p->next=q->next; q->next=L->next; L->next=q; q=p->next; }}///输出单链表void ListPrint_L(LinkList L){ if(L==NULL) printf("The list is null!\n"); else { LNode *p=L->next; printf("The elements of list:\n"); while(p) { printf("%\d ",p->data); p=p->next; } printf("\n"); }}///销毁一个单链表Status FreeList_L(LinkList &L){ if(L==NULL) return true; else { LNode *p; while(L) { p=L; L=L->next; free(p); } }}///将两个非递减的单链表La,Lb合并为非递减的单链表Lcvoid MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ LNode *pa=La->next; LNode *pb=Lb->next; Lc=La; LNode *pc=Lc; while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa?pa:pb; free(Lb);}int main(){ LinkList LA,LB,LC; int n=5; printf("please input the 5 elements of list LA:\n"); CreateListNor_L(LA,5); //CreateList_L(LA,n); //printf("please input the 5 elements of list LB:\n"); //CreateList_L(LB,n); ElemType e;// GetElem_L(LA,3,e);// printf("%d\n",e);// ListInsert_L(LA,3,5);// ListPrint_L(LA);// ListDelete_L(LA,3,e);// ListPrint_L(LA); //MergeList_L(LA,LB,LC); //ListReverse_L(LA); ListPrint_L(LA); FreeList_L(LA); ListPrint_L(LA); return 0;}
阅读全文
0 0
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 单链表的简单实现
- 简单单链表的实现
- 一个简单的单链表实现
- 单链表的逆序----简单实现
- 简单的单链表实现 c
- 单链表的简单c++实现
- 实现一些简单的单链表
- C:单链表的简单实现
- 单链表队列的简单实现
- 单链表的简单函数实现
- Retrofit基础入门
- Python 3从入门到精通13-读文件内容
- Zedboard学习(五):MIO与EMIO操作
- css小技巧
- fetch移动端浏览器兼容问题解决
- 单链表的简单实现
- RestEasy 框架了解
- 图:图的基本概念
- Lock wait timeout exceeded; try restarting transaction错误
- npm依赖包 缓存策略详细教程npm_lazy
- qt5.6的安装,手把手详细图文
- Oracle SQLServer MySQL数据库之间的语法差异
- C++中SendMessage与PostMessage的区别
- C风格字符串,int型,string类型相互转换