线性表实现之单链表

二、演示单链表的创建、插入、删除和查找等操作

#include<stdio.h>
#include<malloc.h>
#include<process.h>
typedef int elemtype;
typedef struct lnode
{
 elemtype data;
 struct lnode *next;
}lnode,*linklist;
//链表的创建
void initlist(linklist&L)
{
 L=(linklist)malloc(sizeof(lnode));
 L->next=NULL;                         //构造了头结点
}
//链表的插入
void insertlist(linklist &L,int i,elemtype e)
{
  linklist p=L,s;
  int j=0;
  while(j<i-1)
  {
   p=p->next;
   j++;
  }
  s=(linklist)malloc(sizeof(lnode));
  s->data=e;
  s->next=p->next;
  p->next=s;
}
//链表的删除
void deletlist(linklist L,int i)
{
 linklist p=L,q;
 int j=0;
 while(j<i-1&&p!=NULL)
 {
  p=p->next;
  j++;
 }
 q=p->next;
 p->next=q->next;
 free(q);
}
//查找元素e是链表的第几个元素
int locatelist(linklist &L,elemtype e)
{
 linklist p=L->next;
  int n=1;
  while(p->data!=e&&p!=NULL)
  {
   p=p->next;
      n++;
  }
  return n;

}
//查找链表的第i个元素是什么
elemtype getelem(linklist &L,int i)
{
  linklist p=L;
  int j=0;
  while(j<i&&p!=NULL)
  {
   p=p->next;
   j++;
  }
  return p->data;

}
//输出链表的元素
void displist(linklist &L)
{
 linklist p=L->next;
 while(p!=NULL)
 {
  printf("%3d",p->data);
  p=p->next;
 }

}
//求链表的长度(即元素个数)
int listlength(linklist &L)
{
 linklist p=L;
 int n=0;
 while(p->next!=NULL)      
 {
  p=p->next;
  n++;
 }
 return n;

}
//判断链表是否为空表
int listempty(linklist &L)
{
 return (L->next==NULL);
}
//销毁链表
void destroylist(linklist &L)
{
 linklist p=L,q=p->next;
 while(q!=NULL)
 {
  free(p);
  p=q;
  q=p->next;
 }
}

int  main()
{
 linklist h;
 printf("1.初始化链表h\n");
 initlist(h);
 printf("此时链表为%s\n",(listempty(h)?"空表":"非空"));
 printf("2.输出链表h长度为%d\n",listlength(h));
 printf("3.依次插入元素1、2、3、4、5、6、7、8、9\n");
 for(int i=1;i<10;i++)
 {
   insertlist(h,i,i);
 }
 printf("4.输出链表h长度为%d\n",listlength(h));
 printf(".输出链表为:");
 displist(h);
 printf("\n");
 printf("5.在第五个位置插入11\n");
 insertlist(h,5,11);
 printf("此时链表h长度为:%d\n",listlength(h));
 printf("输出链表为:");
 displist(h);
 printf("\n");
 printf("6.删除第7个\n");
 deletlist(h,7);
 printf("此时链表h长度为%:%d\n",listlength(h));
 printf("输出链表为:");
 displist(h);
 printf("\n7.输出第5个元素为:%d\n",getelem(h,5));
 printf("8.元素9是第%d个元素\n",locatelist(h,9));
 printf("9.销毁链表!\n");
 destroylist(h);
 printf("Bye-bye!");
 system ("pause");
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值