亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

一個簡單的鏈表程序

2019-11-17 05:19:07
字體:
來源:轉載
供稿:網友
/******************************************************************************/
/*                      作者: 神vlinux飄飄                                    */
/*                        bbs.bc-cn.net                                       */
/*                      時間:2005年1月13日                                    */
/*                      版權沒有,盜版不究                                    */
/******************************************************************************/#include <stdio.h>/*數據結構*/
strUCt card
{
        char name[30];
        char tel[30];
        char zip[255];
        struct card *front_point;
        struct card *next_point;
};struct card *head_point; /*頭節點*/
struct card *end_point;  /*尾節點*/
struct card *now_point;  /*當前節點,很多操作都是圍繞這個節點來完成*//*命令函數區*/
void uppoint();         /*當前節點上移一條記錄*/
void downpoint();       /*當前節點下移一條記錄*/
void save();            /*保存文件*/
void new();             /*在當前節點之后創建一個新的記錄,并把當前節點指向新記錄*/
void ver();             /*顯示版本號,無聊....*/
void del();             /*刪除當前節點的記錄*/
void list();            /*顯示所有的記錄*/
void point();           /*顯示當前節點所指向的記錄*/
void quit();            /*退出程序(推薦選項)*/
void find();            /*查找記錄,并且把節點指向找到的記錄.有兩種查找方式(按名字,按電話)*/
void cls();             /*清屏*/
/*功能函數區*/
void load();                    /*裝載文件*/
void commandline();             /*命令行,你所有的指令都由它來理解,執行*/
void show(struct card *);       /*打印記錄*/
void error(int );               /*錯誤系統,好象顯得有點多余*/
void trade(struct card*,struct card*); /*交換兩個記錄在鏈表中的位置uppoint和downpoint用*/
struct card *search(char *,int);      /*查找記錄*/
void main()
{
        ver();
        load();
        commandline();
}
void commandline()
{
char command[100];                for(;;)
        {
                printf("CMD:");
                gets(command);                if( strcmp(command,"new")==0 )          new();
                else if( strcmp(command,"del")==0 )     del();
                else if( strcmp(command,"find")==0 )    find();
                else if( strcmp(command,"list")==0 )    list();
                else if( strcmp(command,"point")==0 )   point();
                else if( strcmp(command,"quit")==0 )    quit();
                else if( strcmp(command,"cls")==0 )     cls();
                else if( strcmp(command,"ver")==0 )     ver();
                else if( strcmp(command,"save")==0 )    save();
                else if( strcmp(command,"uppoint")==0 ) uppoint();
                else if( strcmp(command,"downpoint")==0)downpoint();
                else                      error(0);
        }
}

void show(struct card *show_point)
{
        printf("/n_______________________________/n");
        printf("NAME : %s/n",show_point->name);
        printf("TEL  : %s/n",show_point->tel);
        printf("ZIP  : %s",show_point->zip);
        printf("/n_______________________________/n");
}
void list()
{
struct card *list_point;
int count=0;        if( head_point->next_point == end_point )
        {
                printf("This is an empty Card!/n");
                return;
        }        list_point=head_point->next_point;
        for(;list_point->next_point!=NULL;list_point=list_point->next_point)
        {
                show(list_point);
                count++;
        }
        printf("Total %d/n/n",count);
}void point()
{
        show(now_point);
}
void new()
{
struct card *new_point;        new_point=(struct card*)malloc(sizeof(struct card));        new_point->next_point=now_point->next_point;
        new_point->front_point=now_point;
        now_point->next_point=new_point;        now_point=new_point;        printf("Enter NAME:");
        gets(new_point->name);        printf("Enter TEL:");
        gets(new_point->tel);        printf("Enter ZIP:");
        gets(new_point->zip);        printf("Creat a new card/n");
        show(new_point);
        printf("/n");
}

void find()
{
struct card *find_point;
char
Words[255];        printf("FIND..../n");
        printf("Enter your search about? (name/tel) :");
        gets(words);        if( strcmp(words,"name")== 0 )
        {
                printf("Enter NAME:");
                gets(words);
                find_point=search(words,0);
                if( find_point==NULL )
                {
                        error(1);
                        return;
                }                else
                {
                        show(find_point);
                        now_point=find_point;
                        return;
                }
        }        if( strcmp(words,"tel")== 0 )
        {
                printf("Enter TEL:");
                gets(words);
                find_point=search(words,1);
                if( find_point==NULL )
                {
                        error(1);
                        return;
                }
                else
                {
                        show(find_point);
                        now_point=find_point;
                        return;
                }
        }
        printf("Error!/n/n");
}
struct card * search(char *words,int type)
{
struct card *search_point;        search_point=head_point->next_point;        if( type == 0 )
        {
                for(;search_point->next_point!=NULL;search_point=search_point->next_point)
                {
                        if( strcmp(search_point->name,words) == 0 )
                 {
                                return search_point;
                 }
                }
                return NULL;
        }        if( type == 1 )
        {
                for(;search_point->next_point!=NULL;search_point=search_point->next_point)
                {
                        if( strcmp(search_point->tel,words) == 0 )
                 {
                                return search_point;
                 }
                }
                return NULL;
        }
}

void quit()
{
char words[10];
        printf("Quit,are you sure?(yes/no)");
        gets(words);
        if( (strcmp(words,"yes"))!=0 )
        {
                printf("Drop action!/n/n");
                return;
        }
        exit(0);
}
void error(int type)
{
        if( type == 0)
        {
                printf("Bad command!/n");
                return;
        }        if( type == 1)
        {
                printf("Find Nothing!/n");
                return;
        }
}void del()
{
struct card *temp_point;
char words[255];        if(head_point->next_point->next_point==NULL)
        {
                error(1);
                return;
        }        show(now_point);
        printf("It will delete this card, are you sure?(yes/no) ");
        gets(words);
        if( strcmp(words,"yes")!=0 )
        {
                printf("drop this action!/n/n");
                return;
        }        printf("Del the card:/n/n");        temp_point=now_point->front_point;        now_point->next_point->front_point=now_point->front_point;
        now_point->front_point->next_point=now_point->next_point;
        free(now_point);        now_point=temp_point;
}
void cls()
{
int i;
        for(i=0;i<60;i++)
                printf("/n");
}void ver()
{
        printf("/n____________________________________________________________________________");
        printf("/n                                  Build by vlinux");
        printf("/n                                   @CopyRight");
        printf("/n                                GXDX.NN.GX.China");
        printf("/n----------------------------------------------------------------------------");
        printf("/n/n");
}
void load()
{
FILE *fp;
struct card *load_point;
struct card *temp_point;        if( (fp=fopen("cardsave.mmd","rb"))==NULL )
        {
                printf("Creat a new cardsave!/n");
                if( (fp=fopen("cardsave.mmd","wb"))==NULL)
                {
                        printf("Sorry~Can not creat files!/n/n");
                        return;
                }
                printf("ok!/n");
                fclose(fp);
        }

        head_point=(struct card*)malloc(sizeof(struct card));
        end_point=(struct card*)malloc(sizeof(struct card));
        head_point->front_point=NULL;
        head_point->next_point=end_point;
        end_point->front_point=head_point;
        end_point->next_point=NULL;        strcpy(head_point->name,"HEAD");
        strcpy(head_point->tel,"HEAD");
        strcpy(head_point->zip,"HEAD");        strcpy(end_point->name,"END");
        strcpy(end_point->tel,"END");
        strcpy(end_point->zip,"END");        now_point=head_point;        while(!feof(fp))
        {
                load_point=(struct card*)malloc(sizeof(struct card));
                fread(load_point,sizeof(struct card),1,fp);
                load_point->next_point=now_point->next_point;
                load_point->front_point=now_point;
                now_point->next_point=load_point;
                now_point=load_point;
        }        fclose(fp);        temp_point=now_point->front_point;        now_point->next_point->front_point=now_point->front_point;
        now_point->front_point->next_point=now_point->next_point;        free(now_point);        now_point=temp_point;        printf("Load files finished!/n");
        return;
}
void save()
{
FILE *fp;
struct card *save_point;
char words[10];
        printf("It will change cardsave.mmd file,are you sure?(yes/no)");
        gets(words);
        if( (strcmp(words,"yes"))!= 0)
        {
                printf("Drop action!/n/n");
                return;
        }
        printf("Saving.../n");
        if( (fp=fopen("cardsave.mmd","wb"))==NULL )
        {
                printf("Can't save files!/n");
                return;
        }
        save_point=head_point->next_point;        for(;save_point->next_point!=NULL;save_point=save_point->next_point)
        {
                fwrite(save_point,sizeof(struct card),1,fp);
        }        printf("Save finished!/n/n");
}
void uppoint()
{
        if( now_point->front_point==head_point )
        {
                printf("Sorry can not move TOP!/n/n");
                return;
        }        printf("Trade cards:");
        show(now_point);
        show(now_point->front_point);
        trade(now_point->front_point,now_point);
        printf("Trade finished!/n/n");
}
void downpoint()
{
        if( now_point->next_point==end_point )
        {
                printf("Sorry can not move END!/n/n");
                return;
        }        printf("Trade cards:");
        show(now_point);
        show(now_point->next_point);
        trade(now_point,now_point->next_point);
        printf("Trade finished!/n/n");
}
void trade(struct card *a_point,struct card *b_point)
{
        a_point->front_point->next_point=b_point;
        b_point->next_point->front_point=a_point;        a_point->next_point=b_point->next_point;
        b_point->front_point=a_point->front_point;        a_point->front_point=b_point;
        b_point->next_point=a_point;
}



使用說明:本程序采用的是雙鏈表的結構,并且頭鏈HEAD和尾鏈END是指定的,不能更改。
<HEAD>-----<記錄1>----<記錄2>---- ... ----<記錄3>----<END>很多操作都是圍繞now_point(當前節點)來進行的。new 在當前節點后插入一個新的記錄,并且把當前節點指向新記錄;
del 刪除當前節點的記錄,當前節點自動指向前一個記錄;
ver 顯示版本號,沒什么用,純粹娛樂;
list 顯示所有記錄;
point 顯示當前節點所指向的記錄;
uppoint 當前節點往前移一條記錄,不改變當前節點的指向;
downpoint當前節點往后移動一條記錄,同樣不改變當前節點的指向;
find 可以按照name或者tel來進行查找,假如找到,當前節點自動指向它;
cls 清屏;
quit 退出程序。
由于將近半年的時間沒看C語言,而且又曾經誤入學習編程的誤區(跑去看java),現在回來感到很多東西都忘光了。所以隨便寫寫個代碼看起來比較長的程序來練練手。這個程序純粹是娛樂所做,沒什么實際意義。
當然,假如你把數據結構和new函數改改就可以變成圖書館治理系統或者是學生治理系統什么的。由于這個程序是在半夜寫的,所以寫完之后第二天早上趕忙起來檢查了一遍,重新寫了中文注釋。我想,既然printf("Hellow MM");都可以拿出來show show,那我的應該沒問題吧~~哦~還有一個重要的問題:
請大家幫我查查我的load函數的裝載文件部分,while(!feof(fp))
        {
                load_point=(struct card*)malloc(sizeof(struct card));
                fread(load_point,sizeof(struct card),1,fp);
                load_point->next_point=now_point->next_point;
                load_point->front_point=now_point;
                now_point->next_point=load_point;
                now_point=load_point;
        }
        fclose(fp);/*刪除多余記錄*/
        temp_point=now_point->front_point;
        now_point->next_point->front_point=now_point->front_point;
        now_point->front_point->next_point=now_point->next_point;
        free(now_point);
        now_point=temp_point;
/**************/
它老是自己在裝載完之后又多加了一條空記錄進來,我想了半天都沒想明白到底是怎么回事。所以只好在裝載完之后又多加了 刪除多余記錄 的代碼。真是無奈啊。請大家幫我分析分析。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲系列中文字幕| 色综合久久精品亚洲国产| 亚洲电影在线看| 国内外成人免费激情在线视频网站| 精品国产乱码久久久久久天美| 国产精品中文久久久久久久| 亚洲精品日产aⅴ| 欧美日韩中文字幕在线| 欧美剧在线观看| 欧美日韩第一页| 国产亚洲欧美aaaa| 国产亚洲精品久久久久动| 91在线中文字幕| 日本精品一区二区三区在线| 日韩经典中文字幕在线观看| 亚洲精品乱码久久久久久金桔影视| 永久免费毛片在线播放不卡| 91中文字幕在线| 亚洲精品国产精品国产自| 最近2019中文免费高清视频观看www99| 欧美日韩加勒比精品一区| 亚洲欧美日韩一区二区在线| 一区二区三区久久精品| 一本一本久久a久久精品综合小说| xxxxxxxxx欧美| 国产精品美乳在线观看| 欧美激情久久久| 精品国产福利在线| 国产精品久久av| 亚洲免费视频观看| 国产精品无av码在线观看| 91av国产在线| 国产精品亚洲综合天堂夜夜| 91在线精品视频| 久久久精品日本| 国语对白做受69| 日韩免费观看av| 国产精品久久精品| 精品国产一区二区三区久久狼黑人| 欧美电影免费看| 亚洲精品aⅴ中文字幕乱码| 亚洲国产欧美日韩精品| 亚洲日韩欧美视频| 影音先锋欧美精品| 九色精品美女在线| 97精品国产97久久久久久| 国产精品亚洲综合天堂夜夜| 国产精品麻豆va在线播放| 精品日本高清在线播放| 国产ts人妖一区二区三区| 久久久精品一区| 国产精品第1页| 欧美一级大片在线免费观看| 日韩电影中文 亚洲精品乱码| 精品久久久久久国产91| 欧美日韩国产成人| 亚洲片国产一区一级在线观看| 亚洲国产高清福利视频| 久久久久久97| 成人精品久久一区二区三区| 国产精品自产拍在线观看| 亚洲欧洲在线看| 国产精品久久久久久久av大片| 国产精品成人va在线观看| 韩国日本不卡在线| 日韩欧美在线观看视频| 中日韩午夜理伦电影免费| 久久久久久久香蕉网| 久久精视频免费在线久久完整在线看| 日韩国产精品视频| 色综合天天狠天天透天天伊人| 久久久久一本一区二区青青蜜月| 亚洲精品国产suv| 久久精品国产成人精品| 亚洲一区二区精品| 91极品女神在线| 中文字幕亚洲专区| 日本欧美一级片| 欧美视频专区一二在线观看| 欧美性猛交视频| 国产精品视频区1| 国产精品国产三级国产专播精品人| 国产成人精品优优av| 国产精品久久av| 日韩欧美国产中文字幕| 国产成人一区二区三区电影| 97国产suv精品一区二区62| 欧美成人精品不卡视频在线观看| 日韩精品在线播放| 国产精品都在这里| 羞羞色国产精品| 亚洲永久在线观看| 精品久久久久久久久中文字幕| 中文字幕在线观看日韩| 俺也去精品视频在线观看| 国产精品中文字幕久久久| 日韩电影中文字幕| 国产亚洲精品久久久久动| 2018国产精品视频| 国产精品爽爽ⅴa在线观看| 欧美在线视频在线播放完整版免费观看| 国产精品99久久久久久白浆小说| 精品国产自在精品国产浪潮| 亚洲欧美日韩中文在线| 亚洲色图综合网| 国内精品久久久久久久| 岛国av午夜精品| 久久久久久久国产精品视频| 亚洲第一页中文字幕| 成人性生交大片免费看视频直播| 久久久久久国产精品三级玉女聊斋| 久久99热精品| 激情懂色av一区av二区av| 亚洲精品女av网站| 日韩欧美在线免费观看| 国产精品成人免费视频| 欧美高清理论片| 国产精品pans私拍| 国产精品wwww| 久久精品国产综合| 日韩国产中文字幕| 成人黄色免费网站在线观看| 韩剧1988在线观看免费完整版| 北条麻妃一区二区在线观看| 久久精品这里热有精品| 欧美精品福利视频| 精品国产依人香蕉在线精品| 精品欧美一区二区三区| 久久精品一偷一偷国产| 国产69精品久久久| 久久免费视频这里只有精品| 欧美在线欧美在线| 成人国产精品av| 性欧美在线看片a免费观看| 色综合久久中文字幕综合网小说| 777777777亚洲妇女| 国产成人精品在线播放| 国产精品视频导航| 91最新在线免费观看| 97av在线视频免费播放| 国产精品女人网站| 5566日本婷婷色中文字幕97| 久久久女女女女999久久| 高潮白浆女日韩av免费看| 亚洲欧美一区二区精品久久久| 2019中文字幕在线观看| 日韩视频免费中文字幕| 久久天天躁夜夜躁狠狠躁2022| 国产日韩欧美中文在线播放| 中文国产成人精品| 国产美女久久精品香蕉69| 精品久久久国产精品999| 国产一区二区香蕉| 91成品人片a无限观看| 国产在线98福利播放视频| 青青久久aⅴ北条麻妃| 亚洲丁香婷深爱综合| 国产精品久久久久秋霞鲁丝| 欧美性猛交xxxx免费看| 97色在线观看免费视频| 欧美极品美女电影一区| 日韩av第一页| 91欧美精品成人综合在线观看| 精品国产一区二区三区久久狼黑人|