单链表的查找、删除、插入!

来源:互联网 发布:淘宝怎么引流到微信 编辑:程序博客网 时间:2024/05/17 03:59
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <iostream>using namespace std;typedef  int Status;typedef struct LNode{int data;struct LNode * next;}LNode, *LinkList;LinkList p;LinkList L;void InitList_L(LinkList & L, int n);Status GetElem_L(LinkList L, int i, int &e);Status ListInsert_L(LinkList & L, int i,int e);//插入Status ListDelete_L(LinkList & L, int i, int & e);//删除void display(int n);void InitList_L(LinkList & l,int n)//链表的初始化{int i,j;L = (LinkList)malloc(sizeof(LNode));L->next = NULL;//先建立一个带头结点的单链表cout<<"请按照顺序输入初始化的值,以空格分隔各个元素:";for(i = n; i > 0; i--){cin>>j;p = (LinkList)malloc(sizeof(LNode));p->data = j;p->next = L->next;L->next = p;}cout<<"链表的初始化成功\n";}Status Search_L(LinkList L,int i, int n){int e,j,k;e = 0;j = 0;p = L->next;for(j = 1; j<n ;j ++){if(p->data == i){e = 1;cout<<"要查找的元素"<<i<<"在第"<<j<<"个位置";return 1;continue;}p = p ->next;}if(e == 0)cout<<"要查找的元素不在链表中\n";}Status ListInsert_L(LinkList & L, int i, int e){int j;p = L;j = 0;LinkList s;while(p && j < i - 1){p = p->next;j ++;}if(!p || j>i-1)return 0;s = (LinkList)malloc(sizeof(LNode));s->data = e;//插入L中s->next = p->next;p->next = s;return 1;}Status ListDelete_L(LinkList & L, int i, int &e)//在带头结点的单链线性表L中,删除第i个元素,并由e返回{int j;LinkList q;p = L;j = 0;while(p->next &&j <i - 1)//寻找第i个结点,令p指向其前驱{p = p->next;j ++;}if(!(p->next) || j > i -1)//删除位置不合理return 0;q = p->next;p->next = q->next;e = q->data;free(q);return e;}void display(int n){int i;p = L->next;cout<<"链表中现在的元素为:";for(i = n; i>0;i--){cout<<p->data<<" ";p = p ->next;}cout<<endl<<endl;}void main(){int j,i,k,s,e,n;s = 1;n = 6;cout<<"1.初始化元素的值设为(共6个元素)"<<endl;cout<<"2.查找元素          3.插入元素   "<<endl;cout<<"4.删除元素          5.显示最后结果"<<endl;while(s != 0){cout<<"请选择你想实现的功能:";cin>>s;switch(s){case 1:InitList_L(L,n);display(n);break;case 2:cout<<"请输入要查找的值:";cin>>j;i = Search_L(L,j,n);display(n);break;case 3:cout<<"请输入要插入的元素的值:\n";cin>>j;cout<<"请输入要插入的元素的位置(1-6之间):\n";cin>>k;ListInsert_L(L,k,j);n ++;cout<<"插入成功!";break;case 4:cout<<"请输入要删除元素的位置 ";cin>>j;i = ListDelete_L(L,j,e);cout<<"你要删除的元素为:"<<i<<endl;n --;display(n);break;case 5:display(n);break;}}}


原创粉丝点击