[Data Structure.C] Addition, deletion, query and modification of sequence table and singly linked list

Baozi, don't you like it? Don't comment? Don't you want to collect it?

Finally, follow me, follow me, follow me, you will see more interesting blogs! ! !

Meow Meow Meow, you are really important to me.

Table of contents

Singly linked list addition, deletion, query and modification

c1.h

sqlist.c

number.c

Addition, deletion, query and modification of single linked list

 c1.h

stuscore.c


Singly linked list addition, deletion, query and modification

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;
}


Addition, deletion, query and modification of single linked list

 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;
 } 

 


Baozi, don't you like it? Don't comment? Don't you want to collect it?

Finally, follow me, follow me, follow me, you will see more interesting blogs! ! !

Meow Meow Meow, you are really important to me.

Guess you like

Origin blog.csdn.net/ormstq/article/details/130665667