欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构--单链表的增删改查

程序员文章站 2022-07-12 11:55:01
...

记录自己学习的过程,和CSDN的小伙伴们一起分享自己的学习经历。和大家共同成长

/*===============================================================
 *   Copyright (C) 2020 All rights reserved.
 *   文件名称:SeqList.c
 *   创 建 者:lqz
 *   创建日期:2020年05月14日
 ================================================================*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#define MAXLEN 100

typedef int DataType;

typedef struct seqlist
{
	DataType Data[MAXLEN];
	int Length;

}SeqList;

SeqList L;


void InitList(SeqList *L)//初始化
{
	L->Length=0;
}

void CreateList(SeqList *L)//创建
{
	int i,n;
	printf("\n请输入你要插入的元素个数!\n");
	scanf("%d",&n);
	printf("\n请输入%d个整数\n",n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&L->Data[i]);
	}
	L->Length=i;

}

void DispList(SeqList *L)//输出
{
	int i;
	for(i=0;i<L->Length;i++)
		printf("%-4d",L->Data[i]);
	printf("\n");
}

int DelList(SeqList *L)//删除
{
	int n;
	printf("请输入你要删除的元素的位置\n");
	scanf("%d",&n);
	if(L->Length==0)
	{
		printf("线性表为空,不能删除\n");
		return 0;
	}

	else if(n<1||n>L->Length)
	{
		printf("输出位置出错,删除失败\n");
		return 0;
	}

	else 
	{
		for(n=n-1;n<L->Length;n++)
		{
			L->Data[n]=L->Data[n+1];

		}
		L->Length-=1;
		printf("删除成功!删除后的线性表为:\n");
		return 1;
	}
}

int Lookup1(SeqList *L)//按值查找
{
	int i,n,y=0;
	printf("请输入你要查找的元素\n");
	scanf("%d",&n);

	for(i=0;i<L->Length;i++)
	{
		if(n==L->Data[i])
			y=1;
	}

	if(y==0)
	{
		printf("你输入的值不存在于线性表!\n");
		return 0;
	}
	else
	{
		printf("你查找的元素位置为:");
		for(i=0;i<L->Length;i++)
		{
			if(n==L->Data[i])
				printf(" %d",i+1);
		}
		printf("\n");
		return 1;
	}
}

int Lookup2(SeqList *L)//按位置查找
{
	int n;
	printf("请输入你要查找元素的位置\n");
	scanf("%d",&n);
	if(n<1||n>L->Length)
	{
		printf("位置出错!\n");
		return 0;
	}
	if(n <= L->Length)
	{
		printf("你查找元素的值为:%d\n",L->Data[n-1]);
		return 1;
	}
}

int Ins(SeqList *L)//插入
{
	int n,i,num;
	printf("请输入你要插入的位置\n");
	scanf("%d",&n);
	if(n<1||n>L->Length)
	{
		printf("插入位置出错\n");
		return 0;
	}
	if(n <= L->Length)
	{
		printf("请输入你要插入的元素\n");
		scanf("%d",&num);
		{
			for(n-=1,i=L->Length;i>n;i--){
				L->Data[i]=L->Data[i-1];
			}
		}
	}
			L->Data[n]=num;
			L->Length++;
			printf("插入元素成功,插入后的线性表为:\n");
			return 1;
}

void Menu()
{
	printf("\n	        顺序栈的各种操作");
	printf("\n	==================================");
	printf("\n	|       1 建立线性表             |");
	printf("\n	|       2 插入操作               |");
	printf("\n	|       3 删除操作               |");
	printf("\n	|       4 按位置查找             |");
	printf("\n	|       5 按值查找               |");
	printf("\n	|       6 求线性表长度           |");
	printf("\n	|       0 返回                   |");
	printf("\n	==================================");
	printf("\n请输入菜单号(0~6):");

}

int main()
{
	int number;
	char ch='Y';

	SeqList L;
	InitList(&L);			//初始化
	while(ch=='Y'||ch=='y')
	{

	Menu();
	scanf("%d",&number);
	getchar();
	switch(number)
	{
		case 1:
			CreateList(&L);
			printf("建立线性表成功\n");
			DispList(&L);
			break;
		case 2:
			Ins(&L);
			DispList(&L);
			break;
		case 3:
			DelList(&L);
			DispList(&L);
			break;
		case 4:
			Lookup2(&L);
			DispList(&L);
			break;
		case 5:
			Lookup1(&L);
			DispList(&L);
			break;
		case 6:
			printf("当前线性表的长度为:%d\n",L.Length);
			break;
		case 0:
			ch='n';
			break;
		default:
			printf("输入错误,请输入0~6选择!\n");
		}
	}
	return 0;
}

相关标签: 笔记