單鏈表的各種操作

/*單鏈表的各種操作*/


# define null 0


typedef char ElemType; /* 字符型數據*/


typedef struct LNode
{
ElemType data;
struct LNode *next;
};

setnull(struct LNode **p);
int length (struct LNode **p);
ElemType get(struct LNode **p,int i);
void insert(struct LNode **p,ElemType x,int i);
int delete(struct LNode **p,int i);
void display(struct LNode **p);


main()
{
struct LNode *head,*q;  /*定義靜態變量*/
int select,x1,x2,x3,x4;
int i,n; 
int m,g;
char e,y; 

  head=setnull(&head);  /*建議鏈表並設置爲空表*/
  printf("請輸入數據長度: ");
  scanf("%d",&n);
  for(i=1;i<n;i++);
  {
  printf("將數據插入到單鏈表中: ");
  scanf("%d",&y);
  insert(&head,y,i);}  /*插入數據到鏈表*/
  display(&head); /*顯示鏈表所有數據*/
 
  printf("select 1 求長度 length()\n");
  printf("select 2 取結點 get()\n");
  printf("select 3 求值查找 locate()\n");
  printf("select 4 刪除結點 delete()\n");
  printf("input your select: ");
  scanf("%d",&select);
switch(select)
{
case 1:
{
x1=length(&head);
printf("輸出單鏈表的長度%d ",x1);
display(&head);
}break;

case 2:
{
printf("請輸入要取得結點: ");
          scanf("%d",&m);
          x2=get(&head,m);
          printf(x2);
display(&head);
}break;

  case 3:
  {
  printf("請輸入要查找的數據: ");
          scanf("%d",&e);
          x3=locate(&head,e);
          printf(x3);
display(&head);
}break;
 
  case 4:
  {
  printf("請輸入要刪除的結點: ");
          scanf("%d",&g);
          x4=delete(&head,g);
          printf(x4);
display(&head);
}break;
}
}
}




setnull(struct LNode **p)
{
*p=null;
}


int length (struct LNode **p)
{
int n=0;
  struct LNode *q=*p;
  while (q!=null)
  {
  n++;
  q=q->next;
  }
  return(n);
}


ElemType get(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p;
while (j<i&&q!=null)
  {
  q=q->next;
  j++;
  }
  if(q!=null)
    return(q->data);
  else
  printf("位置參數不正確!\n");
}


int locate(struct LNode **p,ElemType x)
{
int n=0;
  struct LNode *q=*p;
while (q!=null&&q->data!=x)
  {
  q=q->next;
  n++;
  }
  if(q==null)
  return(-1);
  else
  return(n+1);
}


void insert(struct LNode **p,ElemType x,int i)
{
int j=1;
  struct LNode *s,*q;
  s=(struct LNode *)malloc(sizeof(struct LNode));
  s->data=x;
  q=*p;
  if(i==1)
  {
  s->next=q;
    p=s;
  }
  else
  {
  while(j<i-1&&q->next!=null)
    {
    q=q->next;
    j++;
    }
    if(j==i-1)
    {
    s->next=q->next;
      q->next=s;
    }
    else 
    printf("位置參數不正確!\n");
  }
}


int delete(struct LNode **p,int i)
{
int j=1;
  struct LNode *q=*p,*t;
  if(i==1)
  {
  t=q;
  *p=q->next;
  }
  else
  {
  while(j<i-1&&q->next!=null)
    {
    q=q->next;
    j++;
    }
    if(q->next!=null&&j==i-1)
      {
      t=q->next;
      q->next=t->next;
      }
    else 
    printf("位置參數不正確!\n");
  }
    if(t=null)
    free(t);
}


void display(struct LNode **p)
{
struct LNode *q;
  q=*p;
  printf("單鏈表顯示: ");
  if(q==null)
  printf("鏈表爲空!");
  else if (q->next==null)
        printf("%c\n",q->data);
      else
      {
      while(q->next!=null)
    {
    printf("%c->",q->data);
    q=q->next;
    }
  printf("%c",q->data);
}
  printf("\n");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章