数据结构实践---单链表的初始化,建立,插入,查找,删除。
2015-05-19 21:18
615 查看
linklist.h
linklist.cpp
main.cpp
头插法的结果:
尾插法的结果:
//////////////////////////////////////////////// /**单链表的初始化,建立,插入,查找,删除*/ /////////////////////////////////////////////// /******* linklist.h **********/ #ifndef _LINKLIST_H #define _LINKLIST_H #include <cstdio> #include <cstdlib> typedef int ElemType; ///////////////////////////////////////////// /**定义结点类型*/ typedef struct Node { ElemType data; //单链表中的数据域 struct Node *next; //单链表的指针域 }Node,*LinkList; ///////////////////////////////////////////// /**单链表的初始化*/ extern LinkList LinkListInit(); /**单链表的建立1,头插法建立单链表*/ extern LinkList LinkListCreatH(); /**单链表的建立2,尾插法建立单链表*/ extern LinkList LinkListCreatT(); /**单链表的插入,在链表的第i个位置插入x元素*/ extern LinkList LinkListInsert(LinkList L,int i,ElemType x); /**单链表的删除,在链表中删除值为x的元素*/ extern LinkList LinkListDelete(LinkList L,ElemType x); ///////////////////////////////////////////////////////////// #endif
linklist.cpp
/********* linklist.cpp **********/ #include "linklist.h" #include <iostream> using namespace std; /////////////////////////////////////////////// //单链表的初始化 LinkList LinkListInit() { Node *L; L = (Node *)malloc(sizeof(Node)); //申请结点空间 if (NULL==L) //判断是否有足够的结点空间 { cout<<"申请内存空间失败!"<<endl; } L->next = NULL; //将next设置为NULL,初始长度为0的单链表 return L; } ////////////////////////////////////////////// //头插法建立单链表 LinkList LinkListCreatH() { Node *L; L = (Node *)malloc(sizeof(Node)); //申请头结点空间 L->next=NULL; //初始化一个空链表 ElemType x; //x为链表数据域中的数据 while(cin>>x) { Node *p; p=(Node*)malloc(sizeof(Node)); //申请新的结点 p->data=x; //结点数据域赋值 p->next=L->next; //将结点插入到表头 L->next=p; //头指针指向新插入的结点形成新链 } return L; } /////////////////////////////////////////////////// //尾插法建立单链表 LinkList LinkListCreatT() { Node *L; L = (Node *)malloc(sizeof(Node)); //申请头结点空间 L->next=NULL; //初始化一个空链表 Node *r; r = L; //r起初指向头结点(存放L的地址),接下来始终指向终端结点 ElemType x; while(cin>>x) { Node *p; p = (Node *)malloc(sizeof(Node)); //申请新的结点 p->data=x; //结点数据域赋值 r->next=p; //将结点插入到表头 r=p; //将r指针指向新插入结点的位置,实现循环插入 } r->next=NULL; return L; } //////////////////////////////////////////////////// //单链表的插入 LinkList LinkListInsert(LinkList L,int i,ElemType x) { Node *pre; //pre为前驱节点 pre = L; //初始指向头结点,从头开始找位置i int temp = 0; for(temp=1;temp<i;temp++) pre=pre->next; //查找第i个位置的前驱结点 Node *p; //插入的结点为p p = (Node *)malloc(sizeof(Node)); p->data =x; p->next=pre->next; pre->next=p; return L; } //////////////////////////////////////////////////////// //单链表的删除 LinkList LinkListDelete(LinkList L,ElemType x) { Node *p,*pre; //pre为前驱结点,p为查找的结点 p = L; //p指向头结点 while(p->data!=x) //查找值为x的元素 { pre = p; //pre和p总是指向同一个结点 p=p->next; //循环查找 } pre->next=p->next; //删除操作,将其(p)前驱next指向其(p)后继 free(p); return L; }
main.cpp
/*********** main.cpp ***************/ #include "linklist.h" #include <iostream> using namespace std; int main() { LinkList list,start; list=LinkListInit(); /* cout<<"请输入单链表的数据"<<endl; list = LinkListCreatH(); for (start=list->next;start!=NULL;start=start->next) cout<<start->data<<" "; cout<<endl; */ cout<<"请输入单链表的数据"<<endl; list = LinkListCreatT(); for (start=list->next;start!=NULL;start=start->next) cout<<start->data<<" "; cout<<endl; int i; ElemType x; cout<<"请输入数据的位置"<<endl; scanf("%d",&i); cout<<"请输入插入数据的值"<<endl; scanf("%d",&x); LinkListInsert(list,i,x); for (start=list->next;start!=NULL;start=start->next) cout<<start->data<<" "; cout<<endl; cout<<"请输入要删除元素的值"<<endl; scanf("%d",&x); LinkListDelete(list,x); for(start=list->next;start!=NULL;start=start->next) cout<<start->data<<" "; cout<<endl; return 0; }
头插法的结果:
尾插法的结果:
相关文章推荐
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的初始化,建立,插入,查找,删除
- 双链表的初始化,建立,插入,查找,删除。
- 单链表的初始化,建立,插入,查找,删除
- 双链表的初始化,建立,插入,查找,删除。
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的初始化 建立 插入 查找 删除(转自newwy)
- 单链表的初始化,建立,插入,查找,删除。
- 双链表的初始化,建立,插入,查找,删除
- 双链表( 初始化,建立,插入,查找,删除 )
- 单链表的初始化、建立、插入、查找、删除
- 双链表的初始化,建立,插入,查找,删除
- 双链表的初始化,建立,插入,查找,删除。
- 【高质量代码实践】【链表】链表的建立,查找,删除,插入和输出
- 顺序栈的初始化,建立,插入,查找,删除。
- 链表的建立,插入,删除,查找(1)
- 链队列的初始化,建立,插入,查找,删除。
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)