1. 程式人生 > >考研資料結構與演算法----單鏈表的建立和讀取(1)

考研資料結構與演算法----單鏈表的建立和讀取(1)

    先來個簡單的,晚上再把整表刪除神馬的加上,懶得註釋了,貼出來就是給同樣考研的同志們做個參考。

    話說現在大學折騰的越來越水,當年我們學資料結構的時候單鏈表就算是五個實驗裡面第二難的了,最難的是一個二叉樹的,最後反正是都沒做出來直接往上抄的。其實現在回頭看過來倒是不難實現。除此之外單鏈表一個比較重要的地方就在於今後的許多演算法比如樹、圖都是要在它的基礎上實現的(單鏈表是圖和樹的子集)。

#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node *LinkList;
Status GetElem(LinkList L, int i, ElemType *e);
Status ListInsert(LinkList *L, int i, ElemType e);
Status InitList(LinkList *L, int n);
void ShowList(LinkList L);
int main(void)
{
    LinkList myList;
    InitList(&myList, 9);
    ElemType t;
    GetElem(myList, 1, &t);
    printf("%d",t);
    printf("\n");
    ShowList(myList);
    return 0;
}

Status GetElem(LinkList L, int i, ElemType *e)
{
    int j = 1;
    LinkList p;
    p = L->next;
    while(p && j<i)
    {
        p = p->next;
        j++;
    }
    if(!p || j>i)
    {
        return ERROR;
    }
    *e = p->data;
    return OK;
}
Status InitList(LinkList *L, int n)
{
    LinkList p,r;
    int i;
    *L =(LinkList)malloc(sizeof(Node));
    r = *L;
    for(i=0; i<=n; i++)
    {
        p = (Node*)malloc(sizeof(Node));
        p->data = i+1;
        r->next = p;
        r = p;
    }
    r->next = NULL;
    return OK;
}
void ShowList(LinkList L)
{
    LinkList p;
    p = L->next;
    while(p->next)
    {
        printf("%d\t", p->data);
        p = p->next;
    }
}

最後再發個執行結果圖: