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