c语言链表,请高手指点

# include<dos.h>  
# include<stdio.h>  
# include<stdlib.h>  
# define LEN sizeof (LNode)          //定义LEN为一个字节长度  
enum BOOL {False,True};  
typedef struct LNode  
{ char data;                         //数据域  
  struct node *next;                 //指向下一个节点的指针  
} LNode, *LinkList;  
void GreatList (LinkList&,int);          //生成单链表  
BOOL ListFind (LinkList,char&,int);      //查找  
BOOL ListInsert (LinkList&,int,char);    //插入  
BOOL ListDelete (LinkList&,int,char&);   //删除  
void ListPrint (LinkList);               //显示单链表所有元素  
void main()  
{ LinkList L;  
  BOOL temp;  
  int num,loc,flag=1;  
  char j,ch;  
  //         程序解说  
  printf("本程序实现链式结构的线性表的操作。\n");  
  printf("可以进行查找、删除、插入操作。\n");  
  printf("请输入初始时链表长度:");     //单链表元素个数  
  scanf("%d",&num);  
  GreatList(L,num);                      //生成单链表  
  ListPrint(L);  
  while(flag)  
  { printf("请选择:\n");  
    printf("1.显示所有元素\n");  
printf("2.按序号查找元素\n");  
printf("3.插入一个元素\n");  
printf("4.删除一个元素\n");  
printf("5.退出程序!\n");  
scanf("%c",&j);  
switch(j)  
{ case'1': ListPrint(L);break;  
  case'2': { if(L->next==NULL)  
   printf("链表为空!\n");  
         else printf("请输入要查找的元素的位置:\n");  
 scanf("%d",&loc);                  //输入要查找的位置  
 temp=ListFind(L,ch,loc);           //按关键字查找  
 if(temp=False)  printf("该位置不存在!\n");  
 else  printf("第%d个元素是:%c/n",loc,ch);  
 break;  
   }  
  case'3': { printf("请输入一个字符和要插入的位置(例如:a,3):\n");  
         scanf("%c,%d",&ch,&loc);  
 temp=ListInsert(L,loc,ch);         //插入  
 if(temp=False)  printf("插入失败!\n");  
 else  printf("插入成功!/n");  
 ListPrint(L);  
 break;  
   }  
  case'4': { printf("请输入要删除的元素所在位置:\n");  
         scanf("%d",&loc);  
 temp=ListDelete(L,loc,ch);         //删除  
 if(temp=False)  printf("删除失败!\n");  
 else  printf("成功删除元素:%c\n",ch);            //删除成功,显示该元素  
 ListPrint(L);  
 break;  
   }  
  break;  
      default:flag=0; printf("程序结束,按任意键退出!\n");  
}  
  }  
getchar();  
}  
void GreatList(LinkList &v,int n)  
{ int i;  
  LinkList p;  
  v=(LinkList)malloc(LEN);             //生成头结点  
  v->next=NULL;  
  printf("请输入%d个字符(例如:abcdefg):\n",n);  
  getchar();  
  for(i=n;i>0;--i)  
  { p=(LinkList)malloc(LEN);           //生成新结点  
    scanf("%c",&p->data);  
p->next=v->next;  
v->next=p;  
  }  
}  
BOOL ListFind(LinkList v,char &e,int i)  
{ // 查找第i个元素,成功返回True,并用e返回该元素值,失败返回False  
LinkList p;  
int j=0;  
p=v;  
while (p->next && j<i)   { p=p->next;++j;}   //移动指针,直到找到第i个元素  
    if(j!=i) return False;  
else {e=p->data;                   //查找成功,用e取得该元素值  
return True;  
}  
}  
BOOL ListInsert(LinkList &v,int i,char e)  
{ //在第i个位置插入元素e,成功返回True,失败返回False  
LinkList p,s;  
    int j=0;  
p=v;  
while (p && j<i-1)  { p=p->next;++j;}    //寻找第i-1个结点  
    if(!p||j>i-1)  return False;            //i小于1或者大于表长加1  
s=(LinkList)malloc(LEN);           //生成新结点  
s->data=e;    
s->next=p->next;              //插入链表中  
p->next=s;  
    return True;  
}  
BOOL ListDelete(LinkList &v,int i,char &e)  
{ //删除第i个元素,成功返回True,并用e返回该元素,失败返回False  
LinkList p,q;  
    int j=0;  
p=v;  
while (p && j<i-1)  { p=p->next;++j;}    //寻找第i-1个结点,并用p指向其前趋  
    if(!(p->next)||j>i-1)  return False;            //删除位置不合理  
q=p->next; p->next=q->next;             //删除该元素  
e=q->data;             //e取得该元素的值  
free(q);              //释放该元素空间  
    return True;  
}  
void ListPrint(LinkList v)  
{ //显示链表所有元素  
LinkList q;  
q=v->next;  
printf("链表所有元素:");  
while(q!=NULL)  
{ printf("%c",q->data);q=q->next;}  
printf("\n");  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值