数据结构之链表实现增删改查
来源:互联网 发布:mesh网络 编辑:程序博客网 时间:2024/06/05 15:15
<pre name="code" class="cpp">#include <stdio.h>#include <stdlib.h>#define TRUE 1 #define FALSE 0#define OK 1 #define ERROR 0 #define OVERFLOW -2#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10typedef int Status ;typedef int ElementType ;/*链表实现的数据结构此结构体有两项内容:1.存储值 2.指向下一结点的指针(类型为:LNode)LNode 为此结构体的别名,*LinkList 表示此结构体类型的指针,这样方面下边使用*/typedef struct LNode{ElementType data ;LNode * next ;}LNode , *LinkList;/*-------------创建链表,倒插入-----------------------*/Status CreateList_ch(LinkList &L,int n){int i ;//建立带有头结点的单链表L = (LinkList)malloc(sizeof(LNode)) ;if(!L) exit(OVERFLOW) ;L->next = NULL ; //先建立一个带有节点的单链表for(i=n ;i>0;i--){LinkList p=(LinkList) malloc(sizeof(LNode)); //生成新的节点scanf("%d",&p->data) ; //输入元素的值p->next= L->next ; L->next = p ;}return OK;}/*---------向量表中插入数据------------------------*//*完成功能:向链表的第i个位置插入e元素*/Status Insert_ch(LinkList &L,int i, ElementType e){LinkList p =L->next ;int j = 0;while(p&&j<i-1){ //表示链表不为空且寻找到i-1位置处的指针p = p->next ;++j ;}if(!p||j>i-1) return ERROR ;//位置不合法LinkList q = (LinkList)malloc(sizeof(LNode)); //创建一个新的节点q->data = e ;q->next = p->next ;p->next = q ;return OK ;}/*------------------删除链表中的指定位置的元素------------------------*///并且返回删除元素的值Status Delete_ch(LinkList &L ,int i,ElementType &e){LinkList p =L->next ;int j = 0 ;while(p&&j<i-1){ //寻找第i个结点,并指向要删除节点的前驱p=p->next ;++ j ;}if(!p||j>i-1) return ERROR ;//删除的位置不合法LinkList d = p->next ;e = d->data ;p->next = p->next->next ;//或者使用p->next = d->next free(d); //释放内存资源return OK ;}/*---------获取某个位置上的值---------------------*/Status GetElem(LinkList &L, int i, ElementType &e){LinkList p = L->next ; //指向头结点的第一个元素int j = 1 ; while(p&&j<i){//当p不为空是,条件j=i时推出循环,p指向获取元素的位置p=p->next ;++j ;}if(!p||j>i) return ERROR ; //第i个元素不存在e = p->data ;return OK ;}/*--------------遍历链表--------------------------*/Status PrintList(LinkList &L){LinkList a = L->next ;while(a!=NULL){printf("%d\t" , a->data);a=a->next ;}return OK ;}/*--------------两个有序链表的归并-----------------*/Status MergeList_ch(LinkList La, LinkList Lb, LinkList &Lc){//其中已知La,Lb都是有序的线性表LinkList pa = La->next ;LinkList pb = Lb->next ;LinkList pc = NULL ;Lc = pc = La ;//用La的头结点作为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(pb);return OK ;}void main(){LinkList L ;/*---------创建-----------*/printf("输入五个数,用空格隔开:\n");CreateList_ch(L,5);PrintList(L); /*---------插入-----------*/printf("\n") ;Insert_ch(L,3,5) ;PrintList(L); /*---------删除-----------*/printf("\n") ;int e ;Delete_ch(L,3,e);PrintList(L);printf("\n") ;printf("删除的元素为=%d\n",e); /*---------获取i位置上的元素-----------*/int d ;GetElem(L,1,d);printf("获取第一个元素的值为===%d\n",d);/*-------------测试归并---------------*/LinkList La ,Lb ,Lc;CreateList_ch(La,3);CreateList_ch(Lb,5);MergeList_ch(La,Lb,Lc) ;PrintList(Lc);}
由于水平有限,有错误大家提出来,共同讨论,共同进步
<img src="http://img.blog.csdn.net/20140804163050704?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamltb2xhbmdnZTEyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
0 0
- 数据结构之链表实现增删改查
- 数据结构之图实现增删查改
- 数据结构之数组的增删改查-java实现
- 数据结构线性表的动态顺序实现增删改查
- 数据结构顺序表的“增删改查”功能实现
- java实现链表,增删改查
- 数据结构之顺序表的建立和增删改查
- 【C】利用单链表数据结构实现通讯录,链表的增删改查
- 【数据结构】顺序表的增删改查
- 数据结构顺序表的增删查改
- 链表增删改查
- 图书管理程序(数据结构c语言实现增删改查)
- Java 数据结构数组实现(增删改查)
- 数据结构:java创建串并实现增删改查功能
- mongoose创建数据结构,实现基本增删改查功能
- 用Java语言实现链表的增删改查
- c语言-指针实现链表增删改查
- 链表的基本操作的实现---- 增删改查
- servlet&jsp 登陆,根据输入显示不同页面内容
- 3分钟入睡治疗术的作用
- poj 1961 Period
- ZOJ 2972(背包dp)
- HIVE RCFile高效存储结构
- 数据结构之链表实现增删改查
- 各种贴片封装尺寸图_百度文章
- 串口打印调试
- Prototype in C++: Before and after
- easytouch的使用
- Shell的文件操作函数SHFileOperation
- poj 3904 Sky Code 莫比乌斯反演 或 容斥原理
- Linux下安装Apache
- 看Microchip的尿性,MPLAB的Win32经典版停止更新后的bug