隨筆-14  評論-142  文章-0  trackbacks-0

          線性表的鏈式存儲結(jié)構(gòu) :

          鏈式存儲表示 :

          typedef struct LNode{

          ?

          ? ElemType ? data;

          ? Struct LNode *next;

          ?

          }LNode,*LinkList;

          基本操作在鏈表上的實現(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è)表長為 n, 如果 1<=i<=n, 那么循環(huán)體中語句的執(zhí)行次數(shù)為 i-1. 否則次數(shù)為 n 所以時間復(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 個節(jié)點 , 所以時間復(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 個數(shù)據(jù)元素的值 , 建立新節(jié)點 . 并插入 . 因此算法的時間復(fù)雜度為 O(n).


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

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

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 平昌县| 邹城市| 昭通市| 永平县| 昭觉县| 台湾省| 隆德县| 汕尾市| 山东| 宁安市| 长垣县| 万山特区| 稷山县| 长泰县| 宜黄县| 湘潭市| 江陵县| 临颍县| 高碑店市| 阳春市| 克东县| 新野县| 汤原县| 景宁| 博爱县| 石家庄市| 高雄县| 福清市| 且末县| 乐昌市| 隆化县| 临高县| 长葛市| 吉木乃县| 筠连县| 蒲城县| 卓资县| 阳原县| 荆州市| 汤阴县| 罗江县|