數據結構線性表源碼

蒟蒻的我,今天折騰了3個小時,終於把數據結構的線性表源碼,用C語言寫出來了,qwq

數據結構線性表源碼

在這裏插入圖片描述

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define cmax 30

struct Sqlist
{
	int data[cmax];
	int length;
};
void AscendingSequence(struct Sqlist *L)
{
    int tmp;
    if(L->length<1||L->length>cmax)
    {
        printf("ascending sequence fail\n");
        return ;
    }
    else
    {
        int i=0,j=0;
        for(i=0;i<L->length-1;i++)
        {
            for(j=0;j<L->length-(i+1);j++)
            if(L->data[j]>L->data[j+1])
            {
                tmp=L->data[j+1];
                L->data[j+1]=L->data[j];
                L->data[j]=tmp;
            }
        }
        printf("Celebrate You,ascending sequence OK!\n");
    }
}

void DescendingOrder(struct Sqlist *L)
{
    int tmp;
    if(L->length<1||L->length>cmax)
    {
        printf("Descending Order fail\n");
        return ;
    }
    else
    {
        int i=0,j=0;
        for(i=0;i<L->length-1;i++)
        {
            for(j=0;j<L->length-(i+1);j++)
            if(L->data[j]<L->data[j+1])
            {
                tmp=L->data[j+1];
                L->data[j+1]=L->data[j];
                L->data[j]=tmp;
            }
        }
        printf("Celebrate You,Descending Order OK!\n");
    }
}

void Initlist(struct Sqlist *L)
{
	L->length=0;
	memset(L->data,0,sizeof(L->data));
}

int InsertSqlist(struct Sqlist *L,int i,int val)
{
	if(i<1||i>L->length+1||L->length==cmax)
	{
		printf("insert fail\n");
		return -1;
	}
	else
	{
		int j=L->length-1;
		for(;j>=i-1;j--)
		{
			L->data[j+1]=L->data[j];
		}
		L->data[i-1]=val;
		L->length++;
		return 1;
	}
}

void ShowSqlist(struct Sqlist L)
{
	int j=0;
	for(;j<L.length;j++)
	printf("%d ",L.data[j]);
	printf("\n");
	return ;
}

int DeleteSqlist(struct Sqlist *L,int i)
{
	if(i<1||i>L->length||L->length==0)
	{
		printf("delete fail\n");
		return -1;
	}
	else
	{
		int j=i-1;
		for(;j<L->length-1;j++)
		L->data[j]=L->data[j+1];
		L->length--;
		printf("Celebrate You,delete OK!\n");
		return 1;
	}
}

int GetSqlist(struct Sqlist L,int i)
{
	return L.data[i-1];
}

int main()
{
	struct Sqlist L;
	Initlist(&L);
	char s[50];
	int t,flag=0;
	printf("請輸入一些數進行初始化線性表,最大長度不得超過30,輸入-1代表輸入結束:\n");
	while(~scanf("%d",&t))
	{
	    if(t==-1)
            break;
        flag++;
		InsertSqlist(&L,flag,t);
    }
    printf("初始化之後的線性表的元素爲:\n");
    ShowSqlist(L);
	printf("請輸入你要進行的相關指令(輸入end代表結束):insert,show,delete,get,AscendingSequence,DescendingOrder.\n");
	while(~scanf("%s",s))
    {
        if(strcmp(s,"end")==0)
            break;
        if(strcmp(s,"insert")==0)
        {
            int tmp,val,k;
            printf("請輸入要插入的位置和值;中間以空格隔開:");
            scanf("%d%d",&tmp,&val);
            k=InsertSqlist(&L,tmp,val);
            if(k==1)
            {
                printf("Celebrate You,insert OK!\n");
                printf("插入%d後,線性表元素爲:\n",val);
                ShowSqlist(L);
            }
        }
        if(strcmp(s,"AscendingSequence")==0)
        {
            AscendingSequence(&L);
            printf("升序後的線性表元素爲:\n");
            ShowSqlist(L);
        }
        if(strcmp(s,"DescendingOrder")==0)
        {
            DescendingOrder(&L);
            printf("降序後的線性表元素爲:\n");
            ShowSqlist(L);
        }
        if(strcmp(s,"delete")==0)
        {
            int tmp,k;
            printf("請輸入要刪除的位置:");
            scanf("%d",&tmp);
            k=DeleteSqlist(&L,tmp);
            if(k==1)
            {
                printf("刪除%d位置元素之後,線性表的元素爲:\n",tmp);
                ShowSqlist(L);
            }
        }
        if(strcmp(s,"get")==0)
        {
            int tmp;
            printf("請輸入要獲取元素的位置:");
            scanf("%d",&tmp);
            if(L.length<tmp||tmp<1)
                printf("Location Error!\n");
            else
            {
                int val=GetSqlist(L,tmp);
            printf("Celebrate You,get OK!\n");
            printf("位置爲%d的元素其值爲%d\n",tmp,val);
            }
        }
        if(strcmp(s,"show")==0)
        {
            printf("線性表的元素爲:\n");
            ShowSqlist(L);
            printf("Celebrate You,show OK!\n");
        }
        memset(s,'\0',sizeof(s));
    }
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章