1. 程式人生 > >單鏈表儲存結構程式碼--《大話資料結構》程傑

單鏈表儲存結構程式碼--《大話資料結構》程傑

#include<iostream> #include<stdio.h> #include<ctime>

using namespace std;

//線性錶鏈式儲存的結構程式碼 #define ok 1 #define error 0

typedef int Elemtype; typedef int status;

//定義 typedef struct Node {     Elemtype data;     struct Node *next; }Node; typedef struct Node* linklist;

//這是定義一個結構體,這個結構體有兩個屬性,一個是int型別的data; 另一個是這個結構體本身型別的指標next; //給這個結構定義了一個指標別名:LinkList; //Node a; 宣告一個struct Node結構體型別的結構體變數a; //LinkList b; 等價於 struct Node* b; 等價於 Node *b; 宣告一個struct Node結構體型別的指標變數 b;

//操作 void Creatlistheadz(linklist *L,int n); void Creatlisttail(linklist *L,int n); status Clearlist(linklist *L); status Listinsert(linklist *L,int i,Elemtype e); status Listdelete(linklist *L,int i,Elemtype *e); void Inputlist(linklist L);

//單鏈表整表建立(頭插法) void Creatlistheadz(linklist *L,int n) {     linklist p;     int i;     srand(time(0));     *L=(linklist)malloc(sizeof (Node));     (*L)->next=NULL;   //建立一個帶頭結點的單鏈表         for(i=0;i<n;i++)     {         p=(linklist)malloc(sizeof(Node));         p->data=rand()%100+1;         p->next=(*L)->next;         (*L)->next=p;     } }

//單鏈表整表建立(尾插法) void Creatlisttail(linklist *L,int n) {     linklist p,r;     int i;     srand(time(0));     *L=(linklist)malloc(sizeof (Node)); //建立一個帶頭結點的單鏈表       r=*L;  //r為指向尾部的結點

注意:*L和r的區別,一個是連結串列,一個是結點

    for(i=0;i<n;i++)     {         p=(linklist)malloc(sizeof(Node));         p->data=rand()%100+1;         r->next=p;         r=p;     }     r->next=NULL; }

//刪除單鏈表 status Clearlist(linklist *L) {     linklist p,q;     p=(*L)->next;   //p指向第一個結點     while(p)     {         q=p->next;         free(p);         p=q;     }     (*L)->next=NULL;   //頭結點的指標域為空     return ok; } //獲得元素 status Getelem(linklist L,int i,Elemtype *e) {     int j;     linklist p;     p=L->next;     j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return error;     *e=p->data;

    return ok; }

//插入演算法 status Listinsert(linklist *L,int i,Elemtype e) {     int j;     linklist p,s;     p=*L;     j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return error;

    s=(linklist)malloc(sizeof(Node));     s->data=e;

    s->next=p->next;     p->next=s;     return ok; }

//刪除演算法 status Listdelete(linklist *L,int i,Elemtype *e) {     int j;     linklist p,q;     p=*L;     j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return error;     q=p->next;     p->next=q->next;

    free(q);    //回收節點,釋放記憶體     return ok; }

void Inputlist(linklist L) {     linklist p;     p=L->next;     int i=1,a;     while(p)     {         a=p->data;         cout<<"第"<<i<<"個結點的值為:"<<a<<endl;         p=p->next;         i++;     } }

int main() {      linklist L;      int e=0;      int b=20;      cout<<"建立一個新的單鏈表:"<<endl;      Creatlistheadz( &L,10);      Inputlist(L);

     cout<<"新增一個新的結點後單鏈表為:"<<endl;      Listinsert(&L,6,b);      Inputlist(L);

     cout<<"刪除一個結點後單鏈表為:"<<endl;      Listdelete(&L,8,&e);      Inputlist(L);

     cout<<"--------------------------"<<endl;      Getelem(L,5,&e);      cout<<"e="<<e<<endl;

    system("pause");     return 0; }