数据结构 - - 单链表

作者在 2010-05-09 20:43:45 发布以下内容
单链表存储结构
typedef  char  ElemType;
typedef  struct  Listnode
{
  DataType data;
  struct  ListNode *next;         
} ListNode,*LinkList;

头插法建立单链表
int Creatlist(linklist &Head)
{
  Head=(ListNode *)malloc(sizeof(ListNode));
  Head->next=NULL;
  while((ch=getch())!='\n')
    {
       p=(ListNode *)malloc(sizeof(ListNode));
        if(!p)
        {
         printf("分配储存空间错误");
         return -1;      
        }
       p->data=ch;
       p->next=Head->next;
       Head->next=p;                       
    }    
   return 1;  
}

尾插法建立单链表
int Creatlist(LinkList &Head)
{
  Head=(ListNode *)malloc(sizeof(ListNode));
  Head->next=NULL;
  ListNode *p,*rear;
  rear=Head;
  while((ch=getchar())!='\n')
  {
     p=(ListNode *)malloc(sizeof(ListNode));
     if(!p)
      {
        printf("分配储存空间错误");
        return -1;      
      }
     p->data=ch;
     p->next=rear->next;
     rear->next=p;
     rear=p;                           
  }    
  rear->next=NULL;
  return 1;
}

按序号查找
ListNode*LocateElem(LinkList,int i)
{
  p=L->next; j=1;
  while(p&&j<i)
    {p=p->next;++j;}
   if(!p||j>i)  return NULL;
   return p;
}

按值查找
ListNode*LocateElem(LinkList,DataType e)
{
  p=L->next;
  while(p&&p->data!=e)
  {p=p->next;}
  return p;                                      
}

插入运算
int ListInsert(LinkList &L,int i,DataType e)
{
  p=LocateElem(L,i-1);
  if(p==NULL)
   {printf("插入位置不合法"); return -1;}
  s=(ListNode *)malloc(sizeof(ListNode));
  if(!s)
   {printf("分配储存空间失败"); return -1}
  s->data=e;
  s->next=p->next;
  p->next=s;
  return 1;       
}

删除运算
int ListDelete(LinkList &L,int i,DataType &e)
{
  p=LocateElem(L,i-1);
  if(p==NULL||p->next==NULL)
   {printf("删除位置不合法"); return -1;}
    s=p->next; e=s->data; p->next=s->next; free(s);
    return e;  
}
默认分类 | 阅读 717 次
文章评论,共0条
游客请输入验证码
浏览10946次
文章分类
最新评论