#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; } } }