• <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)和算法分析
            97久久香蕉国产线看观看| 久久久久久综合网天天| 久久精品国产久精国产思思| 蜜臀av性久久久久蜜臀aⅴ麻豆| 麻豆亚洲AV永久无码精品久久| 久久精品国产亚洲一区二区| 久久精品中文字幕第23页| 狠狠色综合网站久久久久久久高清| 国内精品人妻无码久久久影院| 国产精品热久久无码av| 久久久久久久精品妇女99| 99久久精品国内| 超级碰碰碰碰97久久久久| 粉嫩小泬无遮挡久久久久久| 亚洲国产成人乱码精品女人久久久不卡 | 国产精品一区二区久久| 久久亚洲欧洲国产综合| 欧洲精品久久久av无码电影| 日本精品久久久久久久久免费| 久久国产精品成人片免费| 伊人情人综合成人久久网小说| 国产精品久久99| 色综合久久中文字幕无码| 亚洲国产成人精品女人久久久 | 欧美综合天天夜夜久久| 久久午夜无码鲁丝片秋霞 | 精品久久久久久国产| 久久久久亚洲国产| 欧美久久久久久精选9999| 久久免费高清视频| 久久99国产精品一区二区| 久久综合噜噜激激的五月天| 青青草原综合久久| 7777久久亚洲中文字幕| 国产99久久精品一区二区| 97r久久精品国产99国产精| 狠狠色噜噜色狠狠狠综合久久 | 国产精品久久精品| 99久久99这里只有免费的精品| 激情伊人五月天久久综合| 色综合久久久久无码专区|