线性表的链表实验

(1)、单链表的建立。先建立头结点head,将头结点的指针域置为空;然后新建一个结点p, 把此新结点链接到单链表的尾端或始端。

(2)、单链表的插入。新建一个结点p,指定插入位置;从单链表头开始查找结点位置。

(3)、单链表的删除。指定删除位置;从单链表头开始查找结点位置。

这是学数据结构的第一个实验,很简单,不过当初也是花了一点心血了,呵呵

#include <stdio.h>

#include <conio.h>

typedef struct node{
    int data;
    struct node *next;
}LNode,*LinkList;

LinkList CreatLinkList(void)
{
    LinkList H,p,q;
    int n,i;
    H=(LinkList)malloc(sizeof(LNode));
    if(H)
    H->next=NULL;
    p=H;
    printf("please input the number of linklist:  ");
    scanf("%d",&n);
    printf("/n");
    printf("please input the data:/n");
    for(i=0;i<n;i++)
    {
      q=(LinkList)malloc(sizeof(LNode));
      scanf("%d",&q->data) ;
      q->next=p->next;
      p->next=q;
      p=q;
    }
    return H;
}                          //尾插法建立链表

void printflist(LinkList H)
{
     LinkList p;
     p=H->next;
     while(p!=NULL)
     {
       printf("%d ",p->data);
       p=p->next;
     }
     printf("/n");
}                                         //输出函数


LinkList LocateLinkList(LinkList H,int i)
{
     LinkList p;
     int j;
     p=H;
     j=0;
     while(p&&j<i)
     {
       p=p->next;
       j++;
     }
     if(j!=i||!p)
     {
       printf("the i is error or linklist is not exsist");
       return(NULL);
     }
return(p);
}                                        //查找

void InsertLinkList(LinkList H,int i,int x)
{
    LinkList p,q;
    p=LocateLinkList(H,i-1);
    if(!p)
    {
      printf("i is error");
      return(0);
    }
    q=(LinkList)malloc(sizeof(LNode));
    if(!q)
    {
      printf("apply space not success");
      return(0);
    }
    q->data=x;
    q->next=p->next;
    p->next=q;
    printflist(H);
}                                        //  插入

     
void DelLinkList(LinkList H,int i)
{
    LinkList p,q;
    if(!H->next)
    {
      printf("the list can not be deleted");
      return(0);
    }
    p=LocateLinkList(H,i-1);
    if(!p)
    {
      printf("i is error");
      return(0);
    }
    q=p->next;
    p->next=q->next;
    free(q);
    printflist(H);
}                                   //删除
  
main()
{
    LinkList head;   
    int x,i;           
    head=CreatLinkList();
    printf("the primate list is:/n");
    printflist(head);

    printf("please input the insert position/n");
    scanf("%d",&i);
    printf("please input the insert data/n");
    scanf("%d",&x);
    printf("the list after inserting a num is:/n");
    InsertLinkList(head,i,x);

    printf("please input the delete position/n");
    scanf("%d",&i);
    printf("the list after deleting a num is:/n");
    DelLinkList(head,i);

    getch();

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值