数据结构与算法C语言实现

数据结构与算法——单链表

雨中漫步

实现下列:
编写程序完成单链表的下列基本操作:
(1) 初始化单链表La。
(2) 在La中插入一个新结点。
(3) 删除La中的某一个结点。
(4) 在La中查找某结点并返回其位置。
(5) 打印输出La中的结点元素值。

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LinkNode;

void InitList(LinkNode * &L) //初始化
{
    L=(LinkNode *)malloc(sizeof(LinkNode));
    L->next=NULL;
}
bool InsertList(LinkNode * &L,int i,int e)//在单链表i处插入e
{
    int j=0;
    LinkNode *p=L,*s;
    if(i<=0) return false;
    while(j<i-1&&p!=NULL)  //找到i-1个节点
    {
        j++;
        p=p->next;           //p储存i-1的节点
    }
    if(p==NULL)
    return false;
    else
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));
        s->data=e;
        s->next=p->next;         //插入结点
        p->next=s;
        return true;
    }
}
bool DeleteList(LinkNode * &L,int i,ElemType &e)
{
     int j=0;
     LinkNode *p=L,*q;
     if(i<=0) return false;
     while(j<i-1&&p!=NULL)
     {
         j++;
         p=p->next;
     }
     if(p==NULL)  return false;
     else
     {
         q=p->next;
         e=q->data;
         p->next=q->next;
         free(q);
         return true;
     }
}
int Lookfor(LinkNode *L,ElemType e)
{int i=1;
     LinkNode *p=L->next;
     while(p!=NULL&&p->data!=e)
     {p=p->next;
     i++;
     }
    if(p==NULL)            //如果找不到就是返回0,找到返回1
        return 0;
    else
        return(i);
}
void Disp(LinkNode *L)
{
    LinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d",p->data);
        p=p->next;
        printf("\n");
    }
}

int main()
{LinkNode *L;int x=20;char a;
int i,e=0;
  while(x--)
  {
      printf("请输入一个数据完成一下任务:\n输入1初始化\n输入2在i插人一个新节点\n输入3删除结点\n输入4查找并返回其位置\n输入5打印节点元素值\n输入6跳出\n");
      a=getchar();
      if(a=='1')
        InitList(L),
        printf("初始化成功\n");

      if(a=='2')
        {
      printf("请输入插入位置i和插入数据e!\n");
      scanf("%d%d",&i,&e);
        InsertList(L,i,e),printf("插入成功\n");
        }

      if(a=='3')
      {
      printf("请输入删除位置i!\n");
      scanf("%d",&i);
        DeleteList(L,i,e),printf("删除成功\n");
        }

      if(a=='4')
      {
          printf("请输入查找数据!\n");
          Lookfor(L,e),printf("查找完成\n");
      }

      if(a=='5') Disp(L),printf("输出成功\n");
      if(a=='6') break;
  }
    return 0;
}
发布了12 篇原创文章 · 获赞 7 · 访问量 359

猜你喜欢

转载自blog.csdn.net/abcwsp/article/details/103482503
今日推荐