#include
using namespace std;
typedef int ElemType;
typedef struct Node{
ElemType e;
struct Node * next;
}Node,*linkList;
void initList(linkList &L){
L = new Node;
L->next = NULL;
}
//插入
void insertList(linkList &L, ElemType e){
linkList p = new Node;
p->e = e;
p->next = L->next;
L->next = p;
}
//输出
void outputList(linkList &L){
linkList p = L->next;
if (p == NULL)
{
cout<<"此链表为空链表"< } else{ while (p != NULL) { cout< p = p->next; } } } //求表长 int getLength(linkList &L){ int i = 0; linkList p = L; while (p->next != NULL) { i++; p = p->next; } return i; } //查找值为e的结点 bool hasList(linkList &L, ElemType e){ linkList p = L->next; while (p != NULL) { if(p->e == e){ return true; } p = p->next; } return false; } //查找第i个位置的元素 void searchIndex(linkList &L, int index){ int length1 = getLength(L); if (index<=0 || index>length1) { cout<<"您输入的索引超过了线性表的长度范围。"< } else { linkList p = L; int i = 0; while (p->next != NULL) { p = p->next; i++; if(i == index) { cout<<"第个"< } } } } //删除 void deleteElem(linkList &L, ElemType e){ linkList p = L; linkList q = NULL; while (p->next != NULL){ if (p->next->e == e) { q = p->next; p->next = p->next->next; break; } p = p->next; } if (q != NULL) { delete q; cout<<"元素"< } else { cout<<"元素"< } } //删除第i个元素 void deleteIndex(linkList &L, int i){ int length2 = getLength(L); if (i<=0 || i>length2) { cout<<"您输入的索引超过了线性表的长度范围。"< } else { linkList p = L; linkList q = NULL; int num = 0; while (p->next != NULL) { num++; if(num == i){ q = p->next; p->next = p->next->next; break; } p = p->next; } if (q !=NULL) { delete q; cout<<"删除成功。"< } } } //在指定位置插入元素 void insertElement(linkList &L,int i,ElemType e){ int length3 = getLength(L); if (i<=0 || i>length3) { cout<<"您想要插入的位置超过了线性表的长度范围。"< } else { linkList p = L; linkList q = new Node; int num1 = 0; while (p->next != NULL) { num1++; if(num1 == i){ q->next = p->next; p->next = q; q->e = e; break; } p = p->next; } } } int main() { linkList L = NULL; initList(L); while (1) { cout<<"-----线性表操作-----"< cout<<"选择1:插入元素。"< cout<<"选择2:打印出线性表"< cout<<"选择3:返回线性表的长度"< cout<<"选择4:根据索引查找元素"< cout<<"选择5:判断线性表中是否包含指定元素"< cout<<"选择6:根据元素名称删除该元素"< cout<<"选择7:根据索引删除元素"< cout<<"选择8:在指定位置前插入元素"< cout<<"选择9:退出线性表"< cout<<"请输入您的选择"< int i; cin>>i; switch (i) { case 1: cout<<"请输入您要插入的元素的个数:"< int num; cin>>num; for (int i = 0; i < num; i++) { ElemType element1; cin>>element1; insertList(L,element1); } break; case 2: cout<<"此线性表的元素如下:"< outputList(L); break; case 3: int length; length = getLength(L); cout<<"此线性表的表长为"< break; case 4: cout<<"请输入您要查找的的位置:"< int index1; cin>>index1; searchIndex(L,index1); break; case 5: cout<<"请输入您要核对的元素:"< ElemType element2; cin>>element2; bool state; state = hasList(L,element2); if(state){ cout<<"元素"< } else{ cout<<"元素"< } break; case 6: cout<<"请输入您要删除的元素"< ElemType element3; cin>>element3; deleteElem(L,element3); break; case 7: cout<<"请输入您要删除元素的位置:"< int index2; cin>>index2; deleteIndex(L,index2); break; case 8: cout<<"请输入您要插入的位置:"< int address; cin>>address; cout<<"请输入您想要插入的元素:"< ElemType e; cin>>e; insertElement(L,address,e); break; case 9: goto TiaoChu; } } TiaoChu : return 0; }



