1.實作單連結清單的建立;2.實作單連結清單的插入;3.實作單連結清單的删除;4.實作單連結清單的查找;5。實作單連結清單的顯示
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef float ElemType;
//線性表的單連結清單存儲結構
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//單連結清單的建立
Status CreatList_L(LinkList &L,int n)
{//逆序輸入n個元素的值
LNode *p;
int i;
L=(LinkList) malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%f",&p->data);
p->next =L->next;
L->next=p;
}
}
//單連結清單的插入
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LNode *p,*s;
int j;
p=L;
j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j<i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data =e;
s->next=p->next;
p->next=s;
return OK;
}
//單連結清單的删除
Status ListDelet_L(LinkList &L,int i,ElemType &e)
{
LNode *p,*q;
int j;
p=L;
j=0;
while (p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
//單連結清單的查找
Status GetElem_L(LinkList L,int i,ElemType &e)
{
LNode *p;
int j;
p=L;
j=0;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR;
e=p->data ;
return OK;
}
//單連結清單的顯示
void ListPrint_L(LinkList L,int n)
{
LNode *p;
int i;
p=L->next;
for(i=0;i<=n;i++)
{
printf("%f ",p->data);
p=p->next;
}
}
//單連結清單的顯示
void ListPrint_L(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL)
{
printf("%f ",p->data);
p=p->next;
}
printf("\n");
}
main()
{
LinkList L;
Status i,n,flag,k;
ElemType e;
printf("請輸入資料個數:");
scanf("%d",&n);
printf("請逆序輸入各資料:\n");
CreatList_L(L,n);
printf("功能:1.插入元素\n2.删除元素\n3.查找元素\n4.結束\n");
for(k=0;;k++)
{
printf("\n請進行功能的選擇:");
scanf("%d",&flag);
if(flag==1)
{
printf("請輸入插入元素位置及元素\n");
scanf("%d %f",&i,&e);
ListInsert_L(L,i,e);
ListPrint_L(L);
}
if(flag==2)
{
printf("請輸入删除元素位置\n");
scanf("%d",&i);
ListDelet_L(L,i,e);
printf("删除元素為:%f\n",e);
ListPrint_L(L);
}
if(flag==3)
{
printf("請輸入查找元素位置\n");
scanf("%d",&i);
GetElem_L(L,i,e);
printf("查找的值為:%f\n",e);
}
if(flag==4)
break;
}
return OK;
}