对线性链表的完整操作(1)

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef int ElemType;

///////////////////////////////////////////
typedef struct LNode
{
 ElemType data;
 struct LNode *next;
}LinkList; //单链表结点类型
/********************创建链表(头插法建表)得到逆序结果**************************/
void CreateListF(LinkList *&L,ElemType a[],int n)
{
 LinkList *s;
 int i;
 L= (LinkList *)malloc(sizeof(LinkList));
 L->next=NULL;
 for(i=0;i<n;i++)
 {
  s=(LinkList *)malloc(sizeof(LinkList));
  s->data=a[i];
  s->next=L->next;
  L->next=s;

 }
}
/********************创建链表(尾插法建表)得到顺序结果**************************/
void CreateListR(LinkList *&L,ElemType a[], int n)
{
 LinkList *s,*r;
 int i;
 L=(LinkList *)malloc(sizeof(LinkList));
 r=L;
 for(i=0;i<n;i++)
 {
  s=(LinkList *)malloc(sizeof(LinkList));
  s->data=a[i];
  r->next=s;
  r=s;
 }
 r->next=NULL;
}
/*****************c初始化线性链表******************/
void InitList(LinkList *&L)
{
 L=(LinkList *)malloc(sizeof(LinkList));
 L->next=NULL;
}
/*****************销毁线性链表******************/
void DestroyList(LinkList *&L)
{
 LinkList *p=L,*q=p->next;
 while(q!=NULL)
 {
  free(p);
  p=q;
  q=p->next;
 }
 free(p);  //此时q为NULL,p指向尾结点,释放它 
}
/*****************判断线性链表是否为空******************/
int ListEmpty(LinkList *L)
{
 return (L->next==NULL);
}
/*****************返回线性链表的长度******************/
int ListLength(LinkList *L)
{
 LinkList *p=L;
 int n=0;
 while(p->next!=NULL)
 {
  n++;
  p=p->next;
 }
 return n;
}
/*****************输出线性链表******************/
void DispList(LinkList *L)
{
 LinkList *p=L->next;
 while(p!=NULL)
 {
  printf("%d  ",p->data);
  p=p->next;
 }
 printf("\n");
}
/*****************求线性链表中第i个元素值******************/
int GetElem(LinkList *L,int i,ElemType &e)
{
 LinkList *p=L;
 int j=0;
 while(j<i&&p!=NULL)
 {
  j++;
  p=p->next;
 }
 if(p==NULL)
 {
  return 0;
 }
 else
 {
  e=p->data;
  return 1;
 }
}
/*****************按元素值查找线性链表******************/
int LocateElem(LinkList *L,ElemType e)
{
 LinkList *p=L->next;
 int i=1;
 while(p!=NULL&&p->data!=e)
 {
  p=p->next;
  i++;
 }
 if(p==NULL)
 {
  return 0;
 }
 else
 {
  return i;
 }
}
/*****************在线性链表插入元素值******************/
int ListInsert(LinkList *&L,int i,ElemType e)
{
 LinkList *p=L,*s;
 int j=0;
 while(j<i-1&&p!=NULL)
 {
  j++;
  p=p->next;
 }
 if(p==NULL)
 {
  return 0;
 }
 else
 {
  s=(LinkList *)malloc(sizeof(LinkList));
  s->data=e;
  s->next=p->next;
  p->next=s;
  return 1;
 }
}


void main()
{
 
 int a[8]={6,9,1,7,3,7,13,5};
 LinkList *L;
 printf("%s","创建并输出头插法创建线性链表:\n"); 
 CreateListF(L,a,8);

 //printf("%s","创建并输出尾插法创建线性链表:\n");
 //CreateListR(L,a,8);
 DispList(L);
 printf("%s","输出元素值为7的位置:");
 int e=LocateElem(L,7);
 printf("%d\n",e);
 printf("%s","插入元素值为67并输出线性链表:\n");
 ListInsert(L,2,67);
 DispList(L);
}

运行结果为:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章