隨筆-14  評(píng)論-142  文章-0  trackbacks-0

          線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) :

          鏈?zhǔn)酱鎯?chǔ)表示 :

          typedef struct LNode{

          ?

          ? ElemType ? data;

          ? Struct LNode *next;

          ?

          }LNode,*LinkList;

          基本操作在鏈表上的實(shí)現(xiàn) :

          (1) ?? 單鏈表的取元素算法(經(jīng)典

          Status GetElem_L(LinkList L, int i,ElemType &e)

          {

          ?

          p=L->next; j=1;

          while(p && j<i)

          {

          ????? p=p->next;++j;

          }

          if(!p || j>i) return ERROR;

          e=p->data;

          return OK;

          ?

          }

          算法分析 :

          基本操作是 : 比較 j I, 并把指針后移 , 循環(huán)體執(zhí)行的次數(shù) , 與被查元素的位置有關(guān) . 假設(shè)表長(zhǎng)為 n, 如果 1<=i<=n, 那么循環(huán)體中語(yǔ)句的執(zhí)行次數(shù)為 i-1. 否則次數(shù)為 n 所以時(shí)間復(fù)雜度為 O(n).

          ?

          ? (2) ?? 插入元素算法

          Status ListInsert_L(LinkList &L, int i,ElemType e)

          {

          ?

          ?? p=L;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;

          }
          (3) ?? 刪除元素算法

          Status ListDelete_L(LinkList &L, int i,ElemType &e)

          {

          ?? p=L;j=0;

          while(p &&j<i-1)

          ?? {p=p->next;++j}

          if(!p ||j>i-1)

          ????? return? ERROR;

          ??

          q=p->next;

          ?? p->next =q->next;

          ?? e =q->data;

          ?? free(q);

          ?? return OK;

          }

          ?

          算法分析 :

          插入和刪除算法 , 都要先找到第 i-1 個(gè)節(jié)點(diǎn) , 所以時(shí)間復(fù)雜度為 O(n);

          ? (4) ?? 單鏈表的建立算法

          ?

          void CreateList_L(LinkList &L,int n){

          ?

          ?L =(LinkList)malloc(sizeof(LNode));

          ?

          ?L->next = null;

          ? for(i = n;i>0;--i){

          ?

          ? p =(LinkList)malloc(sizeof(LNode));

          ? scanf(&p->data);

          ? p->next = L->next;

          ? L->next =p;

          ? }

          ?

          }

          算法分析 :

          按照逆序循環(huán)輸入 n 個(gè)數(shù)據(jù)元素的值 , 建立新節(jié)點(diǎn) . 并插入 . 因此算法的時(shí)間復(fù)雜度為 O(n).


          posted on 2006-06-16 01:04 liulang 閱讀(959) 評(píng)論(3)  編輯  收藏

          評(píng)論:
          # re: 單鏈表學(xué)習(xí)筆記 2006-06-24 16:18 | leilei
          怎么使用c寫(xiě)的??  回復(fù)  更多評(píng)論
            
          # re: 單鏈表學(xué)習(xí)筆記 2006-06-24 16:20 | liulang
          我現(xiàn)在也在同步學(xué)習(xí)C!!  回復(fù)  更多評(píng)論
            
          # re: 單鏈表學(xué)習(xí)筆記 2006-10-31 18:20 | lovekker
          謝謝,正在學(xué)習(xí) 非常需要!!!   回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新安县| 习水县| 南开区| 尉氏县| 安顺市| 黑河市| 黑山县| 兰州市| 会东县| 平阳县| 邵东县| 南木林县| 敦化市| 平凉市| 古田县| 开封县| 澄迈县| 屏山县| 门源| 扎兰屯市| 博乐市| 延安市| 芜湖县| 锡林浩特市| 涪陵区| 洛阳市| 建平县| 大宁县| 从江县| 商城县| 河津市| 娄底市| 通榆县| 辰溪县| 启东市| 中江县| 阜城县| 英山县| 兴文县| 加查县| 海兴县|