C语言构建线性表

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

/*
    --------------------------

    VER       ||      1.1
    DATA      ||      3/11/2017
    AUTHER    ||      WUD

    --------------------------
*/

static int MAXSIZELINE;
//static int deldata[100];
//static int delflag;
typedef int Status;
typedef int Elemtype;

typedef struct
{
    Elemtype *elem;
    int len;
    int MAXSIZE;
} Line;

void ShowProgram()
{
    //HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    //SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_WHITE);
    int j;
    for(j=0; j<27; j++){
        printf("-");
        Sleep(1);}
    printf("\n");
    printf("VER           ||      1.1\n");
    printf("FINIDATA      ||      3/11/2017\n");
    printf("AUTHER        ||      WUD\n");
    for(j=0; j<27; j++){
        printf("-");
        Sleep(1);
        }
    printf("\n");
    Sleep(200);
}

Status InitLine(Line *L){
    //int MAXSIZELINE;
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
    printf("Hello, Please input The Size of Line:     ");
    scanf("%d",&MAXSIZELINE);
    (*L).elem = (Elemtype *)malloc(MAXSIZELINE*sizeof(Elemtype));
    if ((*L).elem==0){
        printf("InitLine ERROR, Check your original code about malloc  :( n");
        exit(0);}
    else if ((*L).elem != 0){
        Sleep(100);
        printf("InitLine Successfully :)\n");
        Sleep(30);
        printf("The space of Line is %d :)\n\n", MAXSIZELINE);
        (*L).len = 0 ;
        (*L).MAXSIZE = MAXSIZELINE ;}
    return 0 ;
}

void InsertLine(Line *L){
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_BLUE);
    int temp;
    FILE *fp=fopen("INSDATA_1.txt","a");
    fprintf(fp,"INSERT DATA IS-->");
    for((*L).len = 0; (*L).len < (*L).MAXSIZE; (*L).len++){
        printf("Please input the %d number into the Line : ", (*L).len);
        scanf("%d", &temp);
        (*L).elem[(*L).len] = temp;
        fprintf(fp,"%d  ",temp);
        //(*L).len+=1;
        if ((*L).len == (*L).MAXSIZE){
            printf("InsertLine Successfully :)\n");
            printf("Check your Line.MAXSIZELINE?=MAXSIZE, Maybe You Need To Create Some New Space :)\n");}
            }fprintf(fp,"\n");fclose(fp);
}
int DeleteData(Line *L){
    int location;
    int stmp;
    //int i;
    printf("Please Input The Location That You Want To Delete: ");
    scanf("%d", &location);
    //deldata[delflag] = (*L).elem[location];
    //delflag +=1;
    stmp = (*L).elem[location];
    printf("%d\n",(*L).elem[location]);
    for (location=location; location<(*L).len; location++){
    (*L).elem[location] = (*L).elem[location+1];
    }
    (*L).len=(*L).len-1;
    printf("DELETE SUCCESFULLY :)\n");
    //printf("dick  %d   dick", stmp);
    return stmp;
    //deldate[delflag] = (*L).elem[location];
    //printf("Now the size of line is %d\n\n\n",(*L).len);
}

int InsertDataAnalyse(Line *L){
    int space;
    scanf("%d", &space);
    if((*L).len+space > (*L).MAXSIZE){
        printf("ERROR INPUT Len > MAXSIZELINE, maybe you need to malloc some new space\n");
        main();}
    else {
            printf("RELLOC SUCCESSFULLY!\n");
        return space;
    }
}

void InsertData(Line *L){
    int location;
    int data,stmp,space,j;
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
    Sleep(30);
    printf("Please Input The Location That You want to Insert: ");
    scanf("%d", &location);
    Sleep(30);
    printf("The Location Is %d\n", location);
    Sleep(30);
    printf("Please Input The DATA You Want To Insert: ");
    scanf("%d", &data);
    printf("The Date is %d\n", data);
    Sleep(30);
    printf("Now You Need To Increase Some Space So Save Your Date, Please Input INCREAMENT SPACE:");
    Sleep(30);
    space = InsertDataAnalyse(&L);
    (*L).elem = (Elemtype*)realloc((*L).elem,((*L).len+space)*sizeof(Elemtype));
    Sleep(30);
    printf("New Space is %d\n", MAXSIZELINE+space);
    (*L).len = (*L).len+space;
    Sleep(30);
    printf("Save Data!\n");
    for (j = 0; j<80; j++){
        printf(".");
        //Sleep(1);
        }
    printf("\n");
    for(location=location; location<=(*L).MAXSIZE+1; location++){
        stmp = (*L).elem[location];
        (*L).elem[location] = data;
        data = stmp;
        }
    (*L).elem[(*L).len+1] = (*L).elem[(*L).len];
    for (j = 0; j<80; j++){
        printf(">");
       // Sleep(1);
        }
    printf("\n");
    FILE *fp=fopen("INSDATA_2.txt","a");
    fprintf(fp,"INSERT DATA IS-->");
    for (j=0; j<(*L).len-1; j++){
        printf("%d--->", (*L).elem[j]);
        fprintf(fp,"%d  ", (*L).elem[j]);
        Sleep(30);
        if(j == (*L).len-2){
            printf("%d\n",(*L).elem[j+1]);
            fprintf(fp,"%d\n",(*L).elem[j+1]);}
    }fclose(fp);//if (j==(*L).len-1){printf("%d\n", L.elem[j]);}
    for (j = 0; j<80; j++){
        printf(">");
        //Sleep(1);
        }
    printf("\n");
}

Status FreeLine(Line *L){
    free((*L).elem);
    //(*L).elem=NULL;
    //(*L).len=0;
    //(*L).MAXSIZE=0;
    //printf("FreeLine SUCCESSFULLY :)\n");
    //Sleep(30);
    printf("Now the Line Size is %d\n\n", (*L).elem);
    //printf("Now the Line Size is %d\n\n", (*L).elem);
    return 1;
}

Status DisplayLine(Line L){
    int flag = 0;
    int i, j;
    for (i=0; i<L.len; i++){
        printf("The %d number in this Line is %d \n", i, L.elem[i]);
    }
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
    printf("\nDescribe Line \n");
    for (j = 0; j<80; j++){
        printf(">");
        //Sleep(1);
        }
    printf("\n");
    for (j = 0; j<L.len-1; j++){
        printf("%d--->", L.elem[j]);
        Sleep(30);
        //printf("%d,%d",j,L.len);
        if (j==L.len-2)printf("%d\n", L.elem[j+1]);
        flag = 1;
        }
    for (j = 0; j<80; j++){
        printf(">");
        //Sleep(1);
        }
    printf("\n");
    return flag;
}

int main(){
    int point,i=0;
    int deldata[10];
    int delflag=0;
    ShowProgram();
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
    printf("Press 1 to continue else exit :)   ");
    while (scanf("%d",&point)!=EOF){
        if (point!=1){
            exit(0);}
        else{
            Line L;
            InitLine(&L);
            InsertLine(&L);
            Sleep(200);
            int flag = DisplayLine(L);
            deldata[delflag] = DeleteData(&L);
            //printf("\nwrwfasdf  %d  adDaddad\n",deldata[delflag]);
            delflag+=1;
            //int stmp = DeleteData(&L);
            //printf("\n%d\n",stmp);
            //printf("\n%d\n", deldata[delflag]);
            DisplayLine(L);
            InsertData(&L);
            if (flag == 1)printf("\nProgram Run Successfully!\n");
            else printf("ERROR PROGRAM! check your program!\n");
            Sleep(30);
            FreeLine(&L);
            FILE *fp=fopen("DELDATA.txt","a");
            fprintf(fp,"DELETE DATA IS  ");
            printf("DELETE DATA IS: ");
            for(i=0 ; i<delflag; i++){
            printf("%d-->", deldata[i]);
            fprintf(fp,"%d  ",deldata[i]);
            }fprintf(fp,"\n");
            fclose(fp);
            printf("\nPress 1 To continue else Exit!");
            }
        }
        return 0 ;
}
    //system(pause);

接上次的线性表,做了些优化。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值