单链表的简单创建和使用

原创 2018年04月16日 17:40:35

这是单链表的简单形式,我没有尝试双链表,一些简单的功能例如插入删除显示。

#include<stdio.h>
#include<malloc.h>


typedef int Position;
typedef struct LNode * PtrToLNode;


struct LNode
{
	char alp;
	struct LNode *next;
}; 
struct LNode * head;
typedef PtrToLNode List;


void show(  );
List MakeEmpty();
Position Find(char alp);
bool Insert(int X, char alp);
bool Delete(int X);
void DispList();
int Length();




int main()
{
	int i, X, n, cnt, c=0;
	char alp, k;
	show();
	while(1){
      //显示菜单 
		scanf("%d", &n);
		if(n<-1||n>6)
		{
		printf("\n输入无效,请重新输入:");
		continue;
		}
		if(c==0&&(n>0&&n<7)&&n!=1)
		{
		printf("\n还未创建链表,请重新输入:");
		continue; 
		}
		
		switch(n)
		{	
		case 1:
			{
			MakeEmpty();  //建立新的链表
			printf("新的链表为:");
			struct LNode *p1=head;
			cnt = Length()-1;
			for( i=0; i<cnt; i++ )
		    {
			printf("%c", p1->alp);
			p1 = p1->next;
		    }
		    printf("\n");
			c=1;	
			}
        break;
        
		case 2:
			{
			printf("\n请输入你要插入的位置:");
			scanf("%d", &X);
			printf("请输入你要插入的字母:");
			scanf("\n%c", &alp);
			Insert(X, alp);
			}
		break;
		
		case 3:
			{
			printf("输入你要删除的位序号");
			scanf("%d", &X);
			Delete(X); //删除元素
			}
		break;


		case 4: //显示全部元素
			{
		    printf("新的链表为:");
			struct LNode *p2=head;
			cnt = Length()-1;
			for( i=0; i<cnt; i++ )
		    {
				printf("%c", p2->alp);
				p2=p2->next;
		    }
			}
		break;
		
		case 5:
			{
			printf("输入你要查找的字母");
			k = getchar();
			scanf("%c", &alp);
			if( i!=0 && i<=Length() )
			printf("你查找的字母在第%d个位置上!\n", Find(alp)+1);//查找元素函数
			else
			printf("抱歉,找不到该字母\n");
			}
		break;
		
		case 6:
		{
			printf("表长长度为%d\n", Length()-1 ); //求得链表长度 	
		}
		break;	         
		}
		show();
		}
	return 0;
}


int Length() //查找元素长度
{       
    Position cnt = 0;
	struct LNode *p=head;
	while(p)
	{
		//printf("*cnt = %d*%c*\n",cnt, p);
		p = p->next;
		cnt++;
	}
	return cnt;
}
List MakeEmpty()
{
		head = (List)malloc(sizeof(struct LNode));   //在这里申请大小为struct LNode 的结构空间 
		struct LNode *p=(struct LNode *)malloc(sizeof(struct LNode));
		struct LNode *t=(struct LNode *)malloc(sizeof(struct LNode));
		p = head;
		char alp, k;
		printf("请输入字母,输入0为结束按回车键:");//输入连续的字母串,以0为结束 
        k = getchar();
		while(true)
		{
			scanf("%c", &alp);
			if(alp=='0')
		    {
	    	p->next = NULL;
	    	break;
		    }
		p->alp = alp;
	    p->next = t;
	    p = t;
	    t = (struct LNode *)malloc(sizeof(struct LNode));
	    //printf("%c", p->alp);
		}	
}            


Position Find(char alp)//元素查找 
{
	struct LNode *t=head;
	Position i=0, cnt = Length();
	while(t->alp!=alp )
	{
		if( i>cnt )
		break;
	    t = t->next;
	    i++;    	
    }
    printf("%d", i);
	return i;
}


bool Insert(int X, char alp) //插入操作
{
	Position j;
	struct LNode *p=(struct LNode *)malloc(sizeof(struct LNode));
	p = head;
	struct LNode *m=(struct LNode *)malloc(sizeof(struct LNode));
/*  for( j=L->Last; j>=X-1; j-- )
	     p->alp[j+1] = p->alp[j];
	p->alp[i-1] = X;
	p->Last++;*/
	for( j = 0; j<=X-2; j++ )
	p = p->next;
	m->next = p->next;
	p->next = m;
	m->alp = alp;
}


bool Delete(int X) //删除操作
{
	Position j, k;
	struct LNode *u=(struct LNode *)malloc(sizeof(struct LNode));
	struct LNode *o=(struct LNode *)malloc(sizeof(struct LNode));
	u = head;
	/*for( j=i; j<=L->Last; j++ )
	     L->Date[j-1] = L->Date[j];
	L->Last--;*/
	if( X>=2 )
	{
	for( j=0; j<X-2; j++ )
	u = u->next;
	o = u->next;
	u->next = o->next;
	free(o);
	k=1;
	}
	else
	head = u->next;
	if( k=1 )
	printf("删除成功!");
	else
	printf("删除失败!请重试。");
}   


void show()
{
	printf("\n\n");
	printf("                    数字查询系统          \n");
	printf("            ******************************\n");
	printf("            *       1------建   表       *\n");
	printf("            *       2------插   入       *\n");
	printf("            *       3------删   除       *\n");
	printf("            *       4------显   示       *\n");
	printf("            *       5------查   找       *\n");
	printf("            *       6------表   长       *\n");
	printf("            *       0------退   出       *\n");
	printf("            ******************************\n\n");
	printf("请选择你需要的操作(0-6): ");
}

编译器:DEV C++





使用 K-近邻算法识别简单数字验证码实战

Python在机器学习领域应用是非常广泛的,比如,我们可以使用机器学习进行验证码识别,使用机器学习实现计算机视觉项目,或者,我们也可以使用机器学习技术实现网页分类、文本挖掘、情感分析等等各种各样的事情。机器学习的重点在于算法,而算法的学习相对来说是比较枯燥的,所以,只有在学习的时候让算法跟实例结合,才能够让算法的学习变得不枯燥,并且也才能够更好的将理论运用与实践。
  • 2017年04月14日 16:23

简单的链表建立与输出

#include #include #include #include #include using namespace std; struct student_type { i...
  • DoJintian
  • DoJintian
  • 2014-11-25 11:32:59
  • 4300

单链表的创建和插入

  • 2012年03月24日 11:15
  • 25KB
  • 下载

单链表的创建及常用基本操作

单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用...
  • qq_37616069
  • qq_37616069
  • 2018-03-16 19:49:38
  • 19

输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个

#include #include typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; void C...
  • cqwoniu
  • cqwoniu
  • 2018-01-30 16:12:29
  • 48

单链表的创建和遍历

//24 #include #include #include /* typedef struct Node{  int data;//数据域  struct Node *pNext;/...
  • hlfsunshine
  • hlfsunshine
  • 2014-09-27 15:33:27
  • 539

单链表的创建及显示

Description 为足球队员建立记录,要有姓名、身高、年龄、所属俱乐部。请创建一个单链表存储并输出。注意:两种实现方式,头插法创建及尾插法创建。单链表结构体结点如下: struct Fo...
  • ac_blood
  • ac_blood
  • 2017-04-17 20:24:41
  • 518

单链表的整表创建

单链表的创建!!!
  • tuwenqi2013
  • tuwenqi2013
  • 2016-07-01 13:22:25
  • 594

数据结构之单链表——带有节点的单链表的创建、插入和删除(C/C++)

// 带有头节点的单链表的创建、插入和删除#include #include #include typedef int DataType; typedef struct LNode{ D...
  • u012425536
  • u012425536
  • 2016-02-27 12:48:21
  • 252

单链表的建立与输出

1 #include 2 #include 3 #define LEN sizeof(struct node) 4 typedef struct node* Node; 5 struc...
  • csdwb
  • csdwb
  • 2011-12-05 13:31:52
  • 1753
收藏助手
不良信息举报
您举报文章:单链表的简单创建和使用
举报原因:
原因补充:

(最多只允许输入30个字)