⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist.cpp

📁 用于数据结构设计的链表设计源码,菜单编写方式
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef int ElemType;
typedef struct LNode { 
	ElemType data;                      /* 数据子域      */
    struct LNode *next;                 /* 指针子域      */
}LNode;                               /* 结点结构类型  */
LNode  *L;
/*  函数声明  */
LNode *creat_L();
void  out_L(LNode *L);
void  insert_L(LNode *L,int i ,ElemType e);
ElemType delete_L(LNode *L,int i);
int locat_L(LNode *L,ElemType e);
/*  主函数  */
void main()
{ int i,k,loc; ElemType e,x; char ch;
do { printf("\n\n\n");
       printf("\n\n     1. 建立线性链表 ");
       printf("\n\n     2. 在i位置插入元素e");
       printf("\n\n     3. 删除第i个元素,返回其值");
       printf("\n\n     4. 查找值为 e 的元素");
       printf("\n\n     5. 结束程序运行");
       printf("\n======================================");
       printf("\n     请输入您的选择 (1,2,3,4,5)");  scanf("%d",&k);
       switch(k)
	    { case 1:{  L=creat_L(); 
	                out_L(L);
		          } break; 
	     case 2:{ printf("\n i,e=?"); scanf("%d,%d",&i,&e);
		          insert_L(L,i,e);   out_L(L);
		        } break;
	     case 3:{ printf("\n i=?");  scanf("%d",&i);
		          x=delete_L(L,i);  out_L(L);
		          if(x!=-1) printf("\n x=%d\n",x);
		         } break;
	    case 4:{ printf("\n e=?"); scanf("%d",&e);
		         loc=locat_L(L,e);
		         if (loc==-1) printf("\n 未找到 %d",loc);
		           else printf("\n 已找到,元素位置是 %d",loc);
		      } break;
	   } /*  switch  */
	  printf("\n ----------------");
    }while(k>=1 && k<5);
    printf("\n               再见!"); 
    printf("\n      打回车键,返回。"); 
	ch=getchar();
} /* main */

/*  建立线性链表 ( 11,22 ,33 ) */
LNode *creat_L()
{ LNode *h,*p,*s;  ElemType x;
  h=(LNode *)malloc(sizeof(LNode));                  /* 分配头结点 */
  h->next=NULL;
  p=h;  
  printf("\n  data=?");  scanf("%d",&x);     /*  输入第一个数据元素 */
  while( x!=-111)                            /*  输入-111,结束循环 */
     { s=(LNode *)malloc(sizeof(LNode));             /*  分配新结点 */
       s->data=x;  s->next=NULL;
       p->next=s;  p=s;
       printf("data=?( -111 end) "); scanf("%d",&x); /* 输入下一个数据*/
  } 
   return(h); 
 } /* creat_L  */



/* 输出单链表中的数据元素*/
void out_L(LNode *L)
{ LNode *p; char ch;
  p=L->next;    printf("\n\n");
  while(p!=NULL) {  printf("%5d",p->data); p=p->next; 
                  };
  printf("\n\n 打回车键,继续。"); 
  ch=getchar(); 
  } /* out_link */
/*  在i位置插入元素e  */
void insert_L(LNode *L,int i, ElemType e)
{ LNode *s,*p;  int j;
  p=L;      /* 找第i-1个结点  */
  j=0;
  while(p!=NULL && j<i-1) { p=p->next; j++; }
  if(p==NULL || j>i-1) printf("\n i ERROR !");
  else { s=(LNode *)malloc(sizeof(LNode));
	     s->data=e;
	     s->next=p->next;
	     p->next=s;
       }
 } /* insert_L */
/* 删除第i个元素,返回其值 */
ElemType delete_L(LNode *L,int i)
 { LNode *p,*q; int j; ElemType x;
   p=L; j=0;
   while(p->next!=NULL && j<i-1){ p=p->next; j++;}
   if(p->next==NULL) {printf("\n i ERROR !"); return(-1);}
     else { q=p->next; x=q->data;
	        p->next=q->next; free(q);
	        return(x);
	      }
  }  /* delete_L */
 /*  查找值为 e 的元素, 返回它的位置  */
 int locat_L(LNode *L,ElemType e)
 { LNode *p; int j=1;
   p=L->next;
   while(p!=NULL && p->data!=e) {p=p->next; j++;}
   if(p!=NULL)return(j); else return(-1);
 } /* locat_L */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -