数据与结构-单链表

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{
    ElemType date;//数据域 
    struct node *next;//指针域 
}LNode,*LinkList;

//用尾插法建立链表 
LinkList Creat_LinkList1()
{
    LinkList H,r,s;
    H=(LNode*)malloc(sizeof(LNode));//初始化链表 
    H->next=NULL;
    int x;
    r=H;
    printf("请输入数据作为结点用-1,暂停:\n"); 
scanf("%d",&x);
while(x!=-1)
    {
        s=(LNode*)malloc(sizeof(LNode));
     
        s->date=x;
        s->next=r->next;
        r->next=s;
        r=s;
            scanf("%d",&x);//-1表示结束生成子结点
    }
    r->next=NULL;
    return H;
}
//单链表的查找
LinkList Get_LinkList(LinkList H,int k)
{
LinkList p=H;
int j=0;
while(p->next!=NULL&&j<k)
    {
        p=p->next;
        j++;
    }
    if(j==k)
    return p;
    else
    return NULL;
//没找到,位置错误
 } 
 LinkList Get_LinkList1(LinkList H,int k)
{
LinkList p=H;
int j=0;
while(p->next!=NULL&&j<k)
    {
        p=p->next;
        j++;
    }
    if(j==k)
    return p->date;
    else
    return NULL;
//链表的插入
}
int Insert_LinkList(LinkList H,int i,ElemType x)//依次输入待插入的链表,插入位置,插入的元素 
{
    LinkList p,s;
    p=Get_LinkList(H,i-1);//调用按值查找位置函数*
    if(p==NULL)
    {
        printf("插入位置错误!");
        return -1;//返回-1表示输入位置错误 
     } 
     else
     {
         s=(LinkList)malloc(sizeof(LNode));
         s->date=x;
         s->next=p->next;
         p->next=s;
         return 1;//返回1表示插入成功 
     }
 } 
 //删除节点元素 
 int Del_LinkList(LinkList H,int i)
 {
     LinkList p,q;
     p=Get_LinkList(H,i-1);
     q=p->next;
     p->next=q->next;
     free(q);
     return 1;
 }
   //判断表是否为空 
  int ListEmpty(LinkList H)
  {
      if(H->next==NULL)
      return -1;
      else
      return 1;
  }
  //计算表长 
  int length_LinkList(LinkList H)
  {
      LNode *p=H;
      int j=0;
      while(p->next!=NULL)
      {
          p=p->next;
          j++;
      }
      return j;
  }
  //清空表 
  LinkList ClearList(LinkList H)
  {
      H->next=NULL;
   } 
 void output(LinkList H)
 {
     LinkList p;
     p=H->next;
     while(p!=NULL)
     {
         printf("%3d",p->date);
         p=p->next;
     }
     printf("\n");
 }
int main()
{
    LinkList H1;
    int num,i,k;
    H1=Creat_LinkList1(); //初始化并且建立链表 
output(H1);
printf("请输入待插入数据的位置:\n");
scanf("%d",&i);
printf("请输入待插入数据:\n");
scanf("%d",&k);
Insert_LinkList(H1,i,k);
output(H1);
printf("请输入待删除的位置:\n");
scanf("%d",&i);
Del_LinkList(H1,i);
output(H1);
printf("请输入待查找的位置:");
scanf("%d",&i);
num=Get_LinkList1(H1,i);
printf("该元素是:%d\n",num);
printf("请输入你想取元素的位置:\n");
scanf("%d",&i);
num=Get_LinkList1(H1,i);
printf("这个元素的值为:%d\n",num);
printf("判断表是否为空:\n");
num=ListEmpty(H1);
printf("判断结果为%d,负数为空,正数为非空\n",num);
num=length_LinkList(H1);
printf("表长为:%d\n",num);
ClearList(H1);
printf("表已经被清空!\n");
num=length_LinkList(H1);
printf("表长为:%d\n",num);
}
 

 

posted @ 2022-06-13 21:47  回忆也交给时间  阅读(34)  评论(0编辑  收藏  举报