线性表的基本操作及应用(单链表的创建、插入、删除、查找、显示)

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

猜你喜欢

转载自blog.csdn.net/qq_44473695/article/details/89282652
今日推荐