單鏈表的查找、刪除、插入!

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

}
}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章