• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0

            設(shè)某線性表數(shù)據(jù)元素的類型為整型,以鏈表結(jié)構(gòu)存儲(chǔ)線性表。試編程實(shí)現(xiàn):

            (1) 輸入數(shù)據(jù)元素,以先進(jìn)先出形式創(chuàng)建單鏈表

            (2) 銷毀單鏈表

            (3) 線性表置空

            (4) 求線性表長(zhǎng)度

            (5)在第i個(gè)數(shù)據(jù)元素前插入新的元素

            (6) 刪除第i個(gè)元素

            (7) 顯示線性表中的全部元素

            (8) 求最大元素的值和平均值

             


            #include<stdio.h>
            #include<conio.h>
            #include<malloc.h>
            #include<stdlib.h>
            #define ERROR     0
            #define OK        1
            #define OVERFLOW  -2
            typedef struct LNode{
                int data;
                struct LNode *next;
            }LNode,*LinkList;

            int Create_List(LinkList L,int length)
            {//創(chuàng)建一個(gè)帶表頭結(jié)點(diǎn)的大小為n個(gè)的單鏈表
                int i;                   
                LinkList p, tail; //聲明一定要在前面,否則會(huì)出錯(cuò)
                    tail=L;
                for(i=0;i<length;i++)
                {
                    p=(LinkList)malloc(sizeof(LNode));
                    printf("請(qǐng)輸入%d個(gè)數(shù)據(jù)\n",length);
                    scanf("%d",&p->data);
                    p->next=NULL;
                    tail->next=p;
                    tail=tail->next;
                }
                   return OK;
            }

            int display_all(LinkList L,int length) //依賴于長(zhǎng)度,可是卻不定,長(zhǎng)度函數(shù)有問(wèn)題。
            {//顯示所有的數(shù)據(jù)元素
                int i;
                printf("線性表的全部數(shù)據(jù)元素如下:\n");
                for(i=0;i<length-1;i++)
                {
                    printf("%d ",L->next->data);
                    L=L->next;
                }
                printf("\n");
                return OK;
            }

            int length_L(LinkList L) //有問(wèn)題
            {//求得線性表的長(zhǎng)度
                int length=0;
                LinkList p=L;
                while(p!=NULL)
                {
                    ++length;
                    p=p->next;
                }
                return length;
            }

            int ListInsert(LinkList L,int i ,int *e)
            {//插入元素
                LinkList p=L,s;
                int j=0;
                while(p&&j<i-1)
                {
                    p=p->next;
                    ++j;
                }
                 if(!p||j>i-1) return ERROR;
                 s=(LinkList)malloc(sizeof(LNode));
                 s->data=*e;
                 s->next=p->next;
                 p->next=s;
                 return OK;
            }
            int ListDelet(LinkList L, int i)
            {//刪除指定位置的結(jié)點(diǎn)
                LinkList p=L,q;
                int j=0;
                while(p->next&&j<i-1)  //尋找第i-1個(gè)結(jié)點(diǎn)
                {
                    p=p->next;
                    ++j;
                }
                if(!(p->next)||j>i-1) return ERROR;
                q=p->next; p->next=q->next;
                free(q);
                return OK;
            }
            int Destroy_L(LinkList L)   //這里會(huì)遇到一個(gè)問(wèn)題,如果將頭結(jié)點(diǎn)free掉的話就會(huì)出錯(cuò),
                                        //因?yàn)轭^結(jié)點(diǎn)不是自己分配的,而是系統(tǒng)分配的,在主函數(shù)中,所以無(wú)法釋放
            {
                 LinkList head=L,p;
                 p=head;
                 if (head)
                     p = head->next ;
                 head = head->next ;
                 while(head!=NULL)
                 {
                     p=head;
                     head=head->next;
                     free(p);
                 }
                 return OK;
            }
            int ClearList(LinkList L)
            {//線性表置空
                L->next=NULL;  //將頭結(jié)點(diǎn)指針域置為NULL
                return OK;
            }
            int max_num(LinkList L)
            {
                LinkList p=L->next;
                int max=0;
                while(p!=NULL)
                {
                    if(max<=p->data)
                        max=p->data;
                    p=p->next;
                }
                return max;
            }

            float aver_num(LinkList L)  //注意函數(shù)名不要和變量同名,很容易出錯(cuò)
            { //求出所有元素的平均值
                LinkList p=L->next;
                float average;
                int sum=0;
                int length=length_L(L);
                while(p!=NULL)
                {
                    sum+=p->data;
                    p=p->next;
                }
                average=(float)sum/(length-1);
                return average;
            }

            void main()
            {
                int i,get,length,e;
                LNode L;           //創(chuàng)建頭結(jié)點(diǎn)L
                L.next=NULL;
                do{
                    printf("\n");
                    printf("1.輸入數(shù)據(jù)元素,以先進(jìn)先出形式創(chuàng)建單鏈表\n");
                    printf("2.銷毀單鏈表\n");
                    printf("3.線性表置空\(chéng)n");
                    printf("4.求線性表長(zhǎng)度\n");
                    printf("5.在第i個(gè)數(shù)據(jù)元素前插入新的元素\n");
                    printf("6. 刪除第i個(gè)元素\n");
                    printf("7.顯示線性表中的全部元素\n");
                    printf("8.求最大元素的值和平均值\n");
                    printf("9.退出\n");
                    printf("請(qǐng)輸入你選擇的操作序號(hào)\n");
                    scanf("%d",&get);
                    switch(get){
                         case 1:
                                printf("請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù)\n");
                                 scanf("%d",&length);
                                Create_List(&L,length);
                                break;
                         case 2:
                                 Destroy_L(&L);
                                 break;
                         case 3:
                                 ClearList(&L);
                                 break;
                         case 4:
                             length=length_L(&L);
                             printf("這個(gè)線性鏈表的長(zhǎng)度(含頭結(jié)點(diǎn))為%d\n",length);
                             break;
                         case 5:
                             printf("請(qǐng)分別輸入你要插入數(shù)據(jù)的元素的位置(第i個(gè)元素之前)和值(整型)\n");
                             scanf("%d,%d",&i,&e);
                             ListInsert(&L,i,&e);
                             break;
                         case 6:
                             printf("請(qǐng)分別輸入你要?jiǎng)h除數(shù)據(jù)的元素的位置(第i個(gè)元素)\n");
                             scanf("%d",&i);
                             ListDelet(&L,i);
                             break;
                         case 7:
                               length=length_L(&L);
                               display_all(&L,length);
                                break;
                         case 8:
                               printf("線性表中的最大元素是%d\n",max_num(&L));
                               printf("線性表中所有元素的平均值%f\n",aver_num(&L));
                                break;
                         case 9:
                             break;
                    }
                }while(get!=9);
                        
            }
            posted on 2009-11-27 21:35 deercoder 閱讀(4604) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)和算法分析
            久久精品人妻中文系列| 69国产成人综合久久精品| 久久精品亚洲男人的天堂| 亚洲一区中文字幕久久| 国产免费久久久久久无码| 亚洲国产天堂久久综合| 色综合久久综合中文综合网| 亚洲中文久久精品无码| 999久久久国产精品| 久久午夜综合久久| 色婷婷久久综合中文久久蜜桃av| 久久99精品久久久久久动态图| 久久国产精品99久久久久久老狼 | 久久亚洲国产欧洲精品一| 国产亚洲综合久久系列| 国内精品久久久久久不卡影院 | 亚洲国产精品无码久久久秋霞2 | 久久人妻少妇嫩草AV蜜桃| 久久久久国产精品人妻| 国产激情久久久久影院老熟女免费| 久久久久久久免费视频| 亚洲狠狠久久综合一区77777| 国产精品99久久久精品无码| 热99re久久国超精品首页| 国产69精品久久久久9999APGF| 99久久无码一区人妻| 狠狠色丁香久久婷婷综合五月 | 激情久久久久久久久久| 亚洲中文字幕久久精品无码APP | 国产精品热久久毛片| 无码人妻久久久一区二区三区| 久久久久九国产精品| 国内精品久久久久影院日本| 久久人做人爽一区二区三区| 亚洲v国产v天堂a无码久久| 7国产欧美日韩综合天堂中文久久久久| 午夜人妻久久久久久久久| 久久伊人精品一区二区三区| 色偷偷91久久综合噜噜噜噜| 日本国产精品久久| 亚洲人AV永久一区二区三区久久|