對線性鏈表的完整操作(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);
}

運行結果爲:

 

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