链表的处理(《数据结构》例题)

本文介绍了一个使用 C 语言实现的链表操作程序,通过菜单形式提供创建、插入、删除等基本功能。用户可根据提示输入命令进行交互式操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include"stdio.h"
#include"stdlib.h"
#define ElemType int
typedef struct node
{ ElemType data;
struct node *next;
}Lnode;
Lnode *p,*q,*s,*head;
void outlin(Lnode *h);
void creat();
void insert(Lnode *h,ElemType x,ElemType y);
void delete_node(Lnode *h,ElemType x);
void reverse(Lnode *h);
void search(Lnode *h,int x);


void main()
{ int x,y,cord;
do{
 printf("/n----------    主菜单   -------------/n");
    printf("  1  建立线性表        2  擦入一个元素/n");
    printf("  3  删除一个元素      4  逆置链表 /n");
 printf("  5  搜索某数存在否    6  结束程序运行  /n");
    printf("----------------------------------------  /n");
    printf("请输入您的选择(1,2,3,4,5)/n");
 scanf("%d",&cord);
switch(cord)
{
case 1:  {creat();   outlin(head);
 break;}
case 2:{  printf("/n x,y=?注意用逗号分隔");
       scanf("%d,%d",&x,&y);
       insert(head,x,y);
    outlin(head);
      }
 break;
case 3:{  printf("/n x=?");
    scanf("%d",&x);
    delete_node(head,x);
    outlin(head);
    }
 break;
case 4: reverse(head); outlin(head); break;
case 5: printf("/n请输入要搜索的数X=?  ");
     scanf("%d,&x");
  search(head,x);
  break;
case 6:exit(0);
}
}while(cord<=4);
}

void creat()
{
 ElemType x;    Lnode *ptr;
head=(Lnode *)malloc(sizeof(Lnode));
head->next=NULL;   p=head;
printf("/n x=?"); scanf("%d",&x);
while(x!=-999)
{
 ptr=(Lnode*)malloc(sizeof(Lnode));
ptr->data=x;  ptr->next=NULL;
p->next=ptr;
p=ptr;
printf("/n x=?"); scanf("%d",&x);
}
}

void outlin(Lnode  *h)
{ p=h->next; printf("/n  ");
while(p!=NULL) { printf("  data=%4d",p->data);
                  p=p->next;      }
printf("/n  输出结束  /n/n");
}
void insert(Lnode *h,ElemType x,ElemType y)

{
 s=(struct node *)malloc(sizeof(struct node));
s->data=y;
q=h; p=h->next;
while(p!=NULL && p->data!=x)   {q=p;p=p->next;}
q->next=s; s->next=p;
}

void delete_node(Lnode *h,ElemType x)
{
q=h; p=q->next;
while((p!=NULL) && (p->data!=x)) { q=p;  p=p->next; }
if(p==NULL) printf("/n  x  不存在 ! ");
else {
 q->next=p->next;
   free(p);
}
}

void reverse(Lnode *h)
{
 p=h->next;
 h->next=NULL;
 while(p!=NULL)
 {
  q=p->next;
     p->next=h->next;
     h->next=p;
     p=q;
 }
}

void search(Lnode *h,int x)

  p=h->next;
  while(p!=NULL)
  {
   if(x==p->data)
    printf("/n 该数据存在! /n");
   else p=p->next;
  }
  if(p==NULL)
   printf("/n  没有该数据!  /n");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值