蒟蒻的我,今天折騰了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;
}