对线性链表的操作

作者在 2007-12-29 00:16:00 发布以下内容

对线性链表的基本操作

#include <stdio.h>
#include <stdlib.h>
typedef char DateType;
typedef struct node
{
 DateType data;
 struct node* next;
}LinkList;
LinkList* head;
void InitLinkList()
{
 int j;
 DateType x;
 LinkList *p,*s;
 head=(LinkList*)malloc(sizeof(LinkList));
 p=head;
 head->next=NULL;
 printf("\n\t\t\t请输入链表元素,输入'#'结束,格式如(x):\n");
 while(j)
 {
  printf("\t\t\t");
  scanf("%c",&x);
  if(x!='#')
  {
            s=(LinkList*)malloc(sizeof(LinkList));
      s->next=p->next;
      p->next=s;
   s->data=x;
   scanf("%c",&x);
  }
  else
  {
   j=0;
  }
 }
}
void InsertLinkList(LinkList* L,int i,DateType x)
{
 int j=0;
 LinkList* s;
 L=head;
 while(j<i-1 && L!=NULL)
 {
  L=L->next;
  j++;
 }
 if(L==NULL||i<1)
 {
  printf("\n\t\t\t插入位置不合法!");
 }
 else
 {
  s=(LinkList*)malloc(sizeof(LinkList));
     s->next=L->next;
     L->next=s;
     s->data=x;
     printf("\n\t\t\t插入元素成功!");
 }
}
void DeleteLinkList(LinkList* L,int i)
{
 int j=0;
 LinkList* s;
 L=head;
 while(j<i-1 && L->next!=NULL)
 {
  j++;
  L=L->next;
 }
 if(L->next==NULL||i<1)
 {
  printf("\n\t\t\t输出位置不合法!");
 }
 else
 {
  s=L->next;
     L->next=s->next;
     free(s);
     printf("\n\t\t\t删除成功!");
 }
}
void getformLinkList(LinkList* L,int i)
{
 int j;
 L=head;
 for(j=1;j<=i;j++)
 {
  if(L!=NULL)
  {
   L=L->next;
  }
  else
  {
   printf("\n\t\t\t查找位置不合法!");break;
  }
 }
 printf("\n\t\t\t第%d个元素为:%c",i,L->data);
}
void searchLinkList(LinkList* L,DateType x)
{
 int j=1;
 L=head->next;
 while(L->data!=x&&L!=NULL)
 {
  L=L->next;
  j++;
 }
 printf("\n\t\t\t你要元素%c的位置为:%d",x,j);
}
void lenLinkList(LinkList* L)
{
 int j=0;
 L=head->next;
 while(L!=NULL)
 {
  L=L->next;
  j++;
 }
 printf("\n\t\t\t链表的长度为:%d",j);
}
void showLinkList(LinkList* L)
{
 L=head->next;
 if(L==NULL)
 {
  printf("\n\t\t\t链表为空!");
 }
 else
 {
  printf("\n\t\t\t链表元素为:\n");
      printf("\t\t\t");
     for(L;L!=NULL;L=L->next)
  {
      printf("%c\t",*L);
  }
 }
}
void main()
{
 int j,k,i;
 DateType x;
 LinkList L;
 while(j)
 {
  printf("\n\n\n\n");
  printf("\n\t\t\t************************************");
  printf("\n\t\t\t***     1---初始化链表           ***");
  printf("\n\t\t\t***     2---插入元素             ***");
  printf("\n\t\t\t***     3---删除元素             ***");
  printf("\n\t\t\t***     4---按序号查找元素       ***");
  printf("\n\t\t\t***     5---按值查找元素         ***");
  printf("\n\t\t\t***     6---链表长度             ***");
  printf("\n\t\t\t***     7---显示线性链表         ***");
  printf("\n\t\t\t***     0---退出                 ***");
  printf("\n\t\t\t************************************\n");
  printf("\n\t\t\t请选择一个菜单号(0---7):");
  scanf("%d",&k);getchar();
  if(k==1)
  {
   InitLinkList();
  }
  else if(k==2)
  {
   printf("\n\t\t\t请输入插入的序号与元素,格式如(i,x):");
   scanf("%d,%c",&i,&x);
   InsertLinkList(&L,i,x);
  }
  else if(k==3)
  {
   printf("\n\t\t\t请输入要删除元素的序号,格式如(i):");
   scanf("%d",&i);
   DeleteLinkList(&L,i);
  }
  else if(k==4)
  {
   printf("\n\t\t\t请输入要查找元素的序号,格式如(i):");
   scanf("%d",&i);
   getformLinkList(&L,i);
  }
  else if(k==5)
  {
   printf("\n\t\t\t请输入要查找的元素,格式如(x):");
   scanf("%c",&x);
   searchLinkList(&L,x);
  }
  else if(k==6)
  {
   lenLinkList(&L);
  }
  else if(k==7)
  {
   showLinkList(&L);
  }
  else if(k==0)
  {
   j=0;
   printf("\n\t\t\t程序结束!\n");
  }
 }
}

数据结构与算法 | 阅读 4292 次
文章评论,共0条
游客请输入验证码
浏览67719次