【数据结构.C】顺序表和单链表的增删查改

这篇具有很好参考价值的文章主要介绍了【数据结构.C】顺序表和单链表的增删查改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据结构.C】顺序表和单链表的增删查改

宝子,你不点个赞吗?不评个论吗?不收个藏吗?

最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要。

目录

单链表增删查改

c1.h

sqlist.c

number.c

单链表的增删查改

 c1.h

stuscore.c


单链表增删查改

c1.h

 #ifndef _C1_H_
 #define _C1_H_
  
 #include<string.h>
 #include<stdio.h> /* EOF(=^Z或F6),NULL */
 #include<stdlib.h> /* malloc()等 */
 #include<math.h> /* floor(),ceil(),abs() */
 
 /* 函数结果状态代码 */
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1

 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
 typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
 
 #endif

sqlist.c

#include"c1.h"
 #define MAXSIZE 100
typedef int ElemType;


typedef struct{
	ElemType *elem;   
	int length;   
}SqList; 

Status InitList_Sq(SqList *L);
int GetElem(SqList L,int i,ElemType *e);
int LocateElem(SqList L,ElemType e);
Status ListInsert_Sq(SqList *L,int i ,ElemType e);
Status ListDelete_Sq(SqList *L,int i);
void DestroyList(SqList *L);
void ClearList(SqList *L);
int GetLength(SqList L);
int IsEmpty(SqList L);



Status InitList_Sq(SqList *L)
{
	L->elem=(ElemType *)malloc(sizeof(ElemType)* MAXSIZE);   
    if(L->elem==NULL)
	exit(OVERFLOW);        
    L->length=0;				    
    return OK;
  }                  

    


int GetElem(SqList L,int i,ElemType *e)  
{
  if (i<1||i>L.length) 
  return ERROR;   
  *e=L.elem[i-1];   
  return OK;
}


int LocateElem(SqList L,ElemType e)
{
	int i;
  	for (i=0;i<=L.length-1;i++)
      	if (L.elem[i]==e) 
		return i+1;   
 	    return 0; 
}

Status ListInsert_Sq(SqList *L,int i ,ElemType e)  
{
		int j;
   if(i<1 || i>L->length+1) 
   return ERROR;	        
   if(L->length==MAXSIZE) 
   return ERROR;       
   for( j=L->length-1;j>=i-1;j-- ) 
         L->elem[j+1]=L->elem[j];  
    L->elem[i-1]=e;                     
    ++L->length;		     
    return OK;
}

Status ListDelete_Sq(SqList *L,int i)
{
	int j;
   if(i<1||i>L->length) 
   return ERROR;	 
   for (j=i;j<=L->length-1;j++)                   
	L->elem[j-1]=L->elem[j];   
   L->length--;           	                 
  return OK;
}
  
  
  
void DestroyList(SqList *L) 
{
  if (L->elem)  
  free(L->elem);   
}



void ClearList(SqList *L) 
{
   L->length=0;               
}



int GetLength(SqList L)  
{
   return L.length;             
}



int IsEmpty(SqList L) 
{
  if (L.length==0) 
  return OK;      
  else 
  return ERROR;
}

number.c

#include"sqlist.c"
void menu();
void PrintList(SqList L);
void DeleteAll(SqList* L,ElemType e);
void menu()
{
    printf("**顺序表功能选择界面**\n");
	printf("1.初始化顺序表\n"); 
	printf("2.插入\n"); 
	printf("3.批量输入\n"); 
	printf("4.输出\n");
	printf("5.删除第i个元素\n");
	printf("6.删除与值e相等的所有元素\n");
	printf("0.退出\n");
}
void PrintList(SqList L)
{
	int i;
	if(L.length==0)
	{
		printf("当前顺序表为空表!\n");
	 } 
	 else
	 {
	 	printf("顺序表的当前元素:");
		for(i=1;i<=L.length;i++)
		{
			printf("%d ",L.elem[i-1]);
		 } 
		 printf("\n");
	 }
}
void DeleteAll(SqList *L,ElemType e)
{
	int i,x,L_len;
	L_len=GetLength(*L);  
	for(i=1;i<=L_len;i++)
	{
		x=LocateElem(*L,e); 
		  if(x!=0)
			ListDelete_Sq(L,x); 
		  else
			break;	
	}
}
int main()
{
   	SqList L;
	ElemType e;
	int choose,temp,i,n;
	menu();
	while(1)
	{
	
		printf("\n请选择功能:");
		scanf("%d",&choose);
		switch(choose)
		{
			case  1:
				temp=InitList_Sq(&L);
				if(temp==OK)
				{
					printf("顺序表初始化成功!\n");
					printf("顺序表空间的起始化为:%x\n",L.elem);
					printf("顺序表的当前长度为:%d\n",L.length);
					printf("顺序表的当前最大容量为:%d\n",MAXSIZE);
				}
				else
				{
					printf("顺序表初始化失败!");
					return 0; 
				}
				break;
			case  2:
				printf("请输入要插入的元素位置:");
				scanf("%d",&i);
				printf("请输入要插入元素的值:");
				scanf("%d",&e);
				temp=ListInsert_Sq(&L,i,e);
				if(temp==OK)
				{
					printf("插入元素成功!\n");
					PrintList(L);
				 } 
				 else
				 printf("插入失败!\n");
				break;
			case  3:
				printf("请输入要插入元素的个数:");
				scanf("%d",&n);
				printf("请输入要插入的元素(用空格分隔):");
				for(i=1;i<=n;i++)
				{
					scanf("%d",&e);
					temp=ListInsert_Sq(&L,L.length+1,e);
					if(temp==ERROR)
					{
						printf("插入第%d个元素失败!\n",i);
						break;
					}
				 } 
				 if(i>n)
				 	printf("请输入元素成功!\n");
				 	PrintList(L);
				
				break;
			case  4:
				PrintList(L);
				break;
				break;
			case  5:
				printf("请输入要删除的元素位置:");
				scanf("%d",&i);
				ListDelete_Sq(&L,i);
				if(temp==ERROR)
				printf("删除失败!\n");
				else
				{
					printf("删除成功!\n");
					PrintList(L);
				 } 
				break;
			case  6:
				printf("请输入要删除的值:"); 
				scanf("%d",&e);
				DeleteAll(&L,e);
				PrintList(L);
				break;
			case  0:
				printf("退出系统\n");
				return 0;
			default:
				printf("输入错误,请重新输入!\n");	
				break;			
		}
	}
	return 0;
}

【数据结构.C】顺序表和单链表的增删查改


单链表的增删查改

 c1.h

 #ifndef _C1_H_
 #define _C1_H_
  
 #include<string.h>
 #include<stdio.h> /* EOF(=^Z或F6),NULL */
 #include<stdlib.h> /* malloc()等 */
 #include<math.h> /* floor(),ceil(),abs() */
 
 /* 函数结果状态代码 */
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
 typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
 
 #endif

stuscore.c

#include"c1.h"
typedef struct student
{
	char num[6];
	char name[20];
	int score1,score2,score3;
	struct student *next;
}LNode,*LinkList;
void menu();
void CreateList_L(LinkList *L,int n);
void Print_L(LinkList L);
int ListInsert_L(LinkList *L,int i,LNode e);
int ListDelete_L(LinkList *L,int i);
void Print_L(LinkList L);
void help();
//查询学生信息函数
//修改学生信息
//保存学生信息

void help()//辅助系统 
{
	printf("\n0.欢迎使用系统帮助!\n");
	printf("\n1.初次进入系统后,请先选择学生成绩单链表的创建;\n");
	printf("\n2.按照菜单提示键入数字代号;\n");
	printf("\n3.增加学生信息后,请输出学生信息,查验;\n");
	printf("\n4.谢谢您的使用!\n");
	printf("\n");
}

void menu()
{
	printf("****学生成绩管理系统****\n");
	printf("1.学生成绩单链表的创建\n");
	printf("2.插入学生信息\n");
	printf("3.删除学生信息\n");
	printf("4.输出学生信息\n");
	printf("0.退出");
}
void CreateList_L(LinkList *L,int n)
{
	LinkList r,p;
	int i;
	(*L)=(LinkList)malloc(sizeof(LNode));
	r=(*L);
	for(i=1;i<=n;i++)
	{
		p=(LinkList)malloc(sizeof(LNode));
		printf("请输入第%d位学生的学号 姓名 成绩(用空格分隔我):",i);
		scanf("%s %s %d %d %d",p->num,p->name,&p->score1,&p->score2,&p->score3);
		p->next=NULL;
		r->next=p;
		r=p;
    } 
}
void Print_L(LinkList L)
{
	LinkList p;
	int i;
	p=L->next;
	if(!p)
	printf("该学生成绩表为空表!\n");
	else
	{
		printf("所有学生信息:\n");
		printf("学号\t姓名\t数据结构成绩\t高等数学成绩\t大学英语成绩\n");
		while(p)
		{
			printf("%s\t%s\t      %d\t      %d\t      %d\n",p->num,p->name,p->score1,p->score2,p->score3);
			p=p->next;
		}
	}
}
int ListInsert_L(LinkList *L,int i,LNode e)
{
	LinkList p,s;
	int j;
	p=(*L);
	j=0;
	while(p&&j<i-1)
	{
		p=p->next;
		j++;
	}
	if(!p||j>i-1)
	    return ERROR;
	s=(LinkList)malloc(sizeof(LNode));
	*s=e;
	s->next=p->next;
	p->next=s;
	return OK;
	
}
int ListDelete_L(LinkList *L,int i)
{
	LinkList p,q;
	int j;
	p=(*L);
	j=0;
	while(p->next&&j<i-1)
	{
		p=p->next;
		j++;
	}
	if(!(p->next)||j>i-1)
	return ERROR;
	q=p->next;
	p->next=q->next;
	free(q);
	return OK;
}

int main()
{
	
	LinkList L;
	int choose,n,i,temp;
	LNode e;
	char snum[20];
	help();
	while(1)
	{
		menu();
		printf("\n请选择功能:");
		scanf("%d",&choose);
		switch(choose)
		{
			case 1:
				printf("学生成绩单链表的创建\n");
					printf("\n请选择功能:");
				
				scanf("%d",&n);
				CreateList_L(&L,n);
				Print_L(L);
				break;
			case 2:
				printf("请插入学生信息\n");
				scanf("%d",&i);
				printf("请输入要插入学生的学号 姓名 数据结构成绩\t高等数学成绩\t大学英语成绩(用空格分隔):");
				scanf("%s %s %d %d %d",e.num,e.name,e.score1,e.score2,e.score3);
				temp=ListInsert_L(&L,i,e);
				if(temp==OK)
				{
					printf("插入成功!\n");
						printf("\n请选择功能:");
					Print_L(L);
				}
				else
				printf("插入失败!\n");
				break;
			case 3:
				printf("删除学生信息\n");
				printf("请输入要删除元素的位置");
				scanf("%d",&i);
				temp=ListDelete_L(&L,i);
				if(temp==OK)
				{
					printf("删除成功!\n");
						printf("\n请选择功能:");
					Print_L(L);
				 } 
				 else
				 printf("删除失败!\n");
				break;
			case 4:
				printf("输出学生信息\n");
					printf("\n请选择功能:");
                Print_L(L);
				break;
			case 0:
			    printf("退出系统!\n");	
				return 0;
			default:
				printf("输入错误,请重新输入!\n");
				break;
		}
	}
	return 0;
 } 

 【数据结构.C】顺序表和单链表的增删查改


宝子,你不点个赞吗?不评个论吗?不收个藏吗?

最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要。

【数据结构.C】顺序表和单链表的增删查改文章来源地址https://www.toymoban.com/news/detail-515449.html

到了这里,关于【数据结构.C】顺序表和单链表的增删查改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构之顺序表的增删查改

    自今日起,我们正式 越过C语言的大山 ,走向了 数据结构的深山 ,现如今摆在我们面前的第一个坎就是 顺序表 ,我们需要了解顺序表的 定义 ,并且知道,如何对其进行 增删查改 ,之后我们需要在此处基础上写出一份 通讯录代码 ,ok,顺序表,启动! 线性表( linear lis

    2024年01月23日
    浏览(47)
  • <数据结构>顺序表和链表的比较|缓存命中率

    💭前言:通过之前对顺序表和链表的实现,我们可以发现在增删查改某些操作上两者的效率前言有所差异,本篇文章将总结二者的异同。 顺序表的实现 http://t.csdn.cn/Lxyg2 单链表的实现 http://t.csdn.cn/rHgjG 双链表的实现 http://t.csdn.cn/j3amO 📚顺序表通过数组来实现的,所以在物理

    2024年02月05日
    浏览(29)
  • 数据结构入门(C语言)顺序表的增删查改

    本章会用C语言来描述数据结构中的顺序表,实现简单的增删查改操作,其中头文件包含在新建的头文件SeqList.h内,顺序表的实现在新建的Seqlist.c内,主函数Text.c将会实现菜单,方便我们进行功能的选择。 顺序表是用一段物理地址 连续 的存储单元依次存储数据元素的线性结构

    2024年02月03日
    浏览(38)
  • 【数据结构与算法】顺序表与链表(单链表和双链表)超详解图示与源码。

                                                       大家好,今天我们来学习数据结构中的顺序表与链表!源码在最后附上 首先我们先来认识一下 顺序表 :                                       **如上图所示:很多人会以为数组就是顺序表,顺序表就是数组,这

    2024年02月21日
    浏览(35)
  • 数据结构(王道)——线性表之静态链表&顺序表和链表的比较

      如何定义一个静态链表     初始化静态链表:   静态链表的查找、插入、删除           创: 销:   增、删:   查:   顺序表、链表该如何选择?  

    2024年02月16日
    浏览(33)
  • 【数据结构】认识链表和模拟实现单链表

    即使骑的小电驴,也要奋力前进 目录 1.链表 1.1 链表的概念  1.2 链表的逻辑结构图和物理结构图 1.2.1 链表的逻辑结构图  1.2.2 链表的物理结构图  1.3链表结构的分类 1.3.1 链表通过什么进行结构的分类  1.3.2 不同链表结构的逻辑图 2.模拟实现一个单向链表  2.1 MyLinkedList类的

    2024年02月14日
    浏览(31)
  • 【数据结构】顺序表和链表

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上

    2024年01月20日
    浏览(37)
  • 数据结构2:顺序表和链表

    目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 2.3数据相关面试题 2.4顺序表的问题及思考 3.链表 3.1链表的概念及结构 3.2链表的分类 3.3链表的实现 3.4链表面试题 3.5双向链表的实现 4.顺序表和链表的区别 线性表(linear list)是具有相同特征的数据元素的有限序列。线性表是

    2023年04月17日
    浏览(30)
  • 【数据结构】线性表和顺序表

    Yan-英杰的主页 悟已往之不谏 知来者之可追 目录 1.线性表 2.顺序表         2.1 静态顺序表         2.2 动态顺序表         2.3移除元素         线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线

    2023年04月08日
    浏览(67)
  • 数据结构顺序表和链表(超详细)

    线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包