顺序表的应用

1. 顺序表

1.1 写法1

Linear_Opeartor2.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//顺序表


//申明顺序表的大小
#define MAXSIZE  5
typedef bool status;
//创建顺序表
int *Linear_Create()
{
	int *p=(int *)malloc(sizeof(int)*MAXSIZE);
	if(p==NULL)
	{
		printf("创建顺序表失败!\n");
		return NULL;
	}
	//将顺序表进行清空
	memset(p,0,sizeof(int)*MAXSIZE);
	return p;
}
//判断顺序表是否已满
int Linear_Is_Full(int *p)
{
	//如果顺序表已满,返回-1,如果顺序表未满,返回空的位置下标
	for(int i=0;i<MAXSIZE;i++)
	{
		if(p[i]==0)
		{
			return i;
		}
	}
	return -1;
}
//判断顺序表是否为空
status Linear_Is_Empty(int *p)
{
	if(p[0]==0)
	{
		printf("顺序表为空!\n");
		return true;
	}
	return false;
}

//向顺序表中插入数据,按照顺序插入
status Linear_Insert(int *p,int data)
{
	//判断顺序表是否已满
	if(Linear_Is_Full(p)<0)
	{
		printf("顺序表已满,插入失败!\n");
		return false;
	}
	int pos=Linear_Is_Full(p);
	p[pos]=data;
	return true;
}
//遍历顺序表
status Linear_Travel(int *p)
{
	if(p==NULL)
	{
		printf("顺序表不存在,遍历失败!\n");
		return false;
	}
	for(int i=0;i<MAXSIZE;i++)
	{
		printf("p[%d]=%d\n",i,*(p+i));
	}
	return true;
}
//删除顺序表中的数据
status Linear_Delete(int *arr,int *data)
{
	if(Linear_Is_Empty(arr))
	{
		printf("顺序表为空,删除失败!\n");
		return false;
	}
	if(Linear_Is_Full(arr)<0)
	{
		arr[MAXSIZE-1]=0;
		return true;
	}
	int pos=Linear_Is_Full(arr);
	*data=arr[pos-1];
	arr[pos-1]=0;
	return true;
}
//在顺序表的指定位置插入数据
status Linear_Insert_Fixed_Data(int *p,int pos,int data)
{
	//判断顺序表是否已满
	if(Linear_Is_Full(p)<0)
	{
		printf("顺序表已满,插入失败!\n");
		return false;
	}
	//判断位置是否越界
	if(pos<0||pos>MAXSIZE-1)
	{
		printf("插入位置越界,插入失败!\n");
		return false;
	}
	int pos1=Linear_Is_Full(p);
	if(pos1==pos)
	{
		p[pos]=data;
		return true;
	}
	if(pos1<pos)
	{
		printf("插入的位置前还有空位置,插入失败!\n");
		return false;
	}
	if(pos1>pos)
	{
		for(int i=MAXSIZE-1;i>pos;i--)
		{
			p[i]=p[i-1];
		}
		p[pos]=data;
		return true;
	}

}
//删除顺序表的指定位置的数据
status Linear_Delete_Fixed_Data(int *p,int pos,int *data)
{
	if(Linear_Is_Empty(p))
	{
		printf("顺序表为空,删除失败!\n");
		return false;
	}
	if(pos<0||pos>MAXSIZE-1)
	{
		printf("传入的位置,超出了顺序表的大小,删除失败!\n");
		return false;
	}
	if(p[pos]==0)
	{
		printf("传入的位置对应的数据元素为空,删除失败!\n");
		return false;
	}
	else
	{
		*data=p[pos];
		for(int i=pos;i<MAXSIZE-1;i++)
		{
			p[i]=p[i+1];
		}
		p[MAXSIZE-1]=0;
		return true;
	}

}
int main()
{
	int *arr=Linear_Create();
	//向顺序表中插入数据
	Linear_Insert(arr,10);
	Linear_Insert(arr,20);
	Linear_Insert(arr,30);
	Linear_Insert(arr,40);
	//遍历顺序表
	Linear_Travel(arr);
	printf("####################\n");
	Linear_Insert_Fixed_Data(arr,1,50);
	Linear_Travel(arr);
    printf("####################\n");
	// Linear_Insert_Fixed_Data(arr,3,60);
	Linear_Travel(arr);

	return 0;
}

1.2 写法2

Linear_Opeartor.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//顺序表

//申明顺序表的大小
#define MAXSIZE  5
typedef bool status;
//创建顺序表
int *Linear_Create()
{
	int *p=(int *)malloc(sizeof(int)*MAXSIZE);
	if(p==NULL)
	{
		printf("创建顺序表失败!\n");
		return NULL;
	}
	//将顺序表进行清空
	memset(p,0,sizeof(int)*MAXSIZE);
	return p;
}
//判断顺序表是否已满
int Linear_Is_Full(int *p)
{
	//如果顺序表已满,返回-1,如果顺序表未满,返回空的位置下标
	for(int i=0;i<MAXSIZE;i++)
	{
		if(p[i]==0)
		{
			return i;
		}
	}
	return -1;
}
//判断顺序表是否为空
status Linear_Is_Empty(int *p)
{
	if(p[0]==0)
	{
		printf("顺序表为空!\n");
		return true;
	}
	return false;
}

//向顺序表中插入数据,按照顺序插入
status Linear_Insert(int *p,int data)
{
	//判断顺序表是否已满
	if(Linear_Is_Full(p)<0)
	{
		printf("顺序表已满,插入失败!\n");
		return false;
	}
	int pos=Linear_Is_Full(p);
	p[pos]=data;
	return true;
}
//遍历顺序表
status Linear_Travel(int *p)
{
	if(p==NULL)
	{
		printf("顺序表不存在,遍历失败!\n");
		return false;
	}
	for(int i=0;i<MAXSIZE;i++)
	{
		printf("p[%d]=%d\n",i,*(p+i));
	}
	return true;
}
//删除顺序表中的数据
status Linear_Delete(int *arr,int *data)
{
	if(Linear_Is_Empty(arr))
	{
		printf("顺序表为空,删除失败!\n");
		return false;
	}
	if(Linear_Is_Full(arr)<0)
	{
		arr[MAXSIZE-1]=0;
		return true;
	}
	int pos=Linear_Is_Full(arr);
	*data=arr[pos-1];
	arr[pos-1]=0;
	return true;
}

//在任意位置插入数据
//1 2 3 4 5
status Linear_Insert_renyi(int *arr,int pos,int date){
    if(Linear_Is_Full(arr)<0){
        printf("顺序表已经满了,插入数据失败\n");
        return false;
    }

    int end = MAXSIZE-1;
    while(end>pos){
        arr[end] = arr[end-1];
        end--;
    }
    arr[pos] = date;


}

//在任意位置删除
//1 2 3 4 5
status Linear_delete_renyi(int *arr,int pos){

    if(Linear_Is_Empty(arr)){
        printf("顺序表为空,不能删除数据\n");
        return false;
    }

    int begin = pos;
    while(begin<MAXSIZE-1){
        arr[begin] = arr[begin+1];
        begin++;
    }
    arr[MAXSIZE-1] = 0;


}


int main()
{
	int *arr=Linear_Create();
	//向顺序表中插入数据
	Linear_Insert(arr,10);
	Linear_Insert(arr,20);
	Linear_Insert(arr,30);
	//遍历顺序表
	Linear_Travel(arr);
	printf("####################\n");
	int data;
	Linear_Delete(arr,&data);
	printf("删除的数据为:%d\n",data);
	Linear_Travel(arr);

    printf("####################\n");
    Linear_Insert(arr,30);
    Linear_Insert_renyi(arr,0,50);
    Linear_Insert_renyi(arr,4,70);
    Linear_Travel(arr);

    printf("####################\n");
    Linear_delete_renyi(arr,3);
    Linear_Travel(arr);




	return 0;
}

2. 合并两个有序的顺序表

hebingbiao.c

/*************************************************************************
    > File Name: hebingbiao.c
    > Author: lsf
    > Mail: lsf_2012@163.com 
    > Created Time: 2023年10月12日 星期四 16时26分00秒
 ************************************************************************/

#include<stdio.h>

//合并两个有序的顺序表

void hebingshunxvbiao(int *arr3,int *arr1,int *arr2,int sz1,int sz2){

    int str3 = 0;
    int str1 = 0;
    int str2 = 0;

    while(str1<sz1 && str2<sz2){

        if(arr1[str1]<arr2[str2]){
            arr3[str3] = arr1[str1];
            str1++;
        }else{
            arr3[str3] = arr2[str2];
            str2++;
        }
        str3++;
    }

    while(str1<sz1){
        arr3[str3++] = arr1[str1++];
    }
    while(str2<sz2){
        arr3[str3++] = arr2[str2++];
    }
    
}

int main()
{
    int arr1[] = {1,5,7,9,11};
    int arr2[] = {1,2,4};
    int arr3[40];
    int sz1 = sizeof(arr1)/sizeof(arr1[0]);
    int sz2 = sizeof(arr2)/sizeof(arr2[0]);

    hebingshunxvbiao(arr3,arr1,arr2,sz1,sz2);

    

    int sz3 = sz1+sz2;

    for(int i=0;i<sz3;i++){
        printf("%d ",arr3[i]);
    }

}

3. 使用链表完成一个简单的学生管理系统

student.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//链表
struct Node{
    char name[20];
    int age;
    struct Node* next;
};

struct Node* L = NULL;//定义一个全局变量的头指针

//新增学生
void stu_insert(){

    struct Node* newstu = (struct Node*)malloc(sizeof(struct Node));

    //录入信息
    printf("请输入名字:");
    scanf("%s",newstu->name);

    printf("请输入年龄:");
    scanf("%d",&(newstu->age));

    newstu->next = NULL;

    if(L==NULL){//如果头结点指向空,就证明该链表还买有数据
        L = newstu;//头指针指向新的学生数据
    }else{//反之链表中已经有了数据
        //遍历链表找到最后一个数据,将新数据追加上去
        struct Node* p = L;
        while (p->next!=NULL){
            p = p->next;
        }
        //到这里已经找到了最后一个数据,将新数据追加在后面
        p->next = newstu;
    }

}

//遍历链表
void bianli(){
    struct Node* p = L;//将头指针赋值给一个新的变量,防止头结点丢失

    if(p==NULL){
        printf("没有学生信息\n");
        return;
    }

    while(p!=NULL){
        printf("姓名:%s      年龄:%d\n",p->name,p->age);
        p = p->next;//指向下一个节点
    }
}

//查询学生信息
struct Node * select(){
    char name[20];
    printf("请输入学生的姓名:");
    scanf("%s",name);

    struct Node* p = L;//将头指针赋值给一个新的变量,防止头结点丢失
    while(p!=NULL){
        if(strcmp(name,p->name)==0){
            printf("该生信息如下\n");
            printf("姓名:%s     年龄:%d\n",p->name,p->age);
            return p;
        }
         p = p->next;//指向下一个节点
    }

    printf("没有该学生\n");
    return NULL;
}

//更改学生信息
void update(){

    struct Node* p = select();//先查学生
    if(p!=NULL){//学生存在
        printf("请重新录入该生信息\n");
        //录入信息
        printf("请输入名字:");
        scanf("%s",p->name);

        printf("请输入年龄:");
        scanf("%d",&(p->age));

        printf("学生信息更改成功\n");
    }else{
        printf("你要更改的学生不存在\n");
    }


}

//删除学生信息
void delete(){
    
    char name[20];
    printf("请输入要删除的学生得姓名:");
    scanf("%s",name);

    //双指针
    struct Node *pre = NULL;
    struct Node *cur = L;

    while(cur!=NULL){//遍历链表
        if(strcmp(name,cur->name)==0){//找到了删的人
            if(pre==NULL){//头结点是要删的人
                L = cur->next;
            }else{
                pre->next = cur->next;
            }
            printf("该生已被删除\n");
            free(cur);
            cur=NULL;
            return;
        }
        pre = cur;
        cur = cur->next;
    }
    printf("该生不存在\n");
    
}

void menu(){
    printf("****************************\n");
    printf("***1.add       2.select*****\n");
    printf("***3.show      4.upadte*****\n");
    printf("***5.delete    0.exit  *****\n");
    printf("****************************\n");
}


int main()
{
    
    int input;
    
    do{
        menu();
        printf("请选择:");
        scanf("%d",&input);
        switch (input)
        {
        case 1:
            stu_insert();//新增
            break;
        case 2:
            select();//查询
            break;
        case 3:
            bianli();//遍历
            break;
        case 4:
            update();//更改
            break;
        case 5:
            delete();//删除
            break;
        case 0:
            bianli();//遍历
            break;
        default:
            printf("选择错误\n");
            break;
        }

    }while(input);
    return 0;
}

相关推荐

  1. 顺序应用

    2023-12-11 01:46:03       38 阅读
  2. 数据结构中顺序应用

    2023-12-11 01:46:03       13 阅读
  3. 顺序应用——通讯录实现

    2023-12-11 01:46:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 01:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 01:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 01:46:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 01:46:03       20 阅读

热门阅读

  1. 力扣119双周赛

    2023-12-11 01:46:03       40 阅读
  2. 力扣面试150题 | 轮转数组

    2023-12-11 01:46:03       45 阅读
  3. 智能化缺陷检测系统的发展趋势

    2023-12-11 01:46:03       47 阅读
  4. Android 13 - Media框架(22)- ACodecBufferChannel

    2023-12-11 01:46:03       25 阅读
  5. LeetCode 2048. 下一个更大的数值平衡数

    2023-12-11 01:46:03       42 阅读
  6. Linux结束程序运行的命令

    2023-12-11 01:46:03       35 阅读
  7. dubbo

    dubbo

    2023-12-11 01:46:03      35 阅读