C語言實現常用資料結構——鏈表

來源:互聯網
上載者:User

標籤:鏈表   sizeof   實現   new   刪除   while   type   splay   address   

#include<stdio.h>#include<stdlib.h>typedef struct Node {    int data;    struct Node *next;} node;/*初始化鏈表:1.首先給頭指標分配空間,將頭指標賦給temp2.其次給每一個元素分配空間3.將內容賦給當前節點的data,NULL賦給當前節點的next指標4.把當前節點賦給(頭指標)上一個節點的next指標5.上一節點指標後移,準備初始化下個元素6.最後返回當前鏈表的頭指標*/node *initnode() {    int i;    node *p = (node*)malloc(sizeof(node));    node *temp = p;    for (i = 0; i < 10; i++) {        node *a = (node*)malloc(sizeof(node));        a->data = i;        a->next = NULL;        temp->next = a;        temp = temp->next;    }    return p;}/*指定位置插入元素:1.將頭指標賦給temp2.temp一直遍曆直到指定位置3.給需要插入的元素分配空間,並將內容賦給分配好空間的元素4.將插入位置的後一元素賦給要插入元素的next指標5.將插入元素賦給temp的next指標6.最後返回當前鏈表的頭指標*/node *insertElem(node *p, int elem, int pos) {    int i;    node *temp = p;    for ( i = 0; i < pos; i++) {        temp = temp->next;    }    node *c = (node*)malloc(sizeof(node));    c->data = elem;    c->next = temp->next;    temp->next = c;    return p;}/*刪除指定位置的元素:1.將頭指標賦給temp2.temp一直遍曆直到指定位置3.聲明一個變數代表待刪除節點4.將待刪除節點的下一節點賦給待刪除節點的上一節點的next指標5.釋放待刪除節點空間6.最後返回當前鏈表的頭指標*/node *delElem(node *p, int pos) {    int i;    node *temp = p;    for ( i = 0; i < pos; i++) {        temp = temp->next;    }    node *c = temp->next;    temp->next = c->next;    free(c);    return p;}/*查詢指定元素的位置:1.將頭指標賦給temp2.temp一直遍曆直到temp節點的值等於要查詢的元素3.返回當前節點的index4.如果鏈表遍曆結束也未找到指定節點,返回-1*/int selectElem(node *p, int elem) {    node *temp = p;    int i = 0;    while (temp->next) {        temp = temp->next;        if (temp->data == elem) {            return i;        }        i++;    }    return -1;}/*更新鏈表指定節點的值*/node *amendElem(node *p, int pos, int newElem) {    int i;    node *temp = p;    for ( i = 0; i < pos; i++) {        temp = temp->next;    }    node *amend = temp->next;    amend->data = newElem;    return p;}/*遍曆鏈表*/void display(node *p) {    node *temp = p;    while (temp->next) {        temp = temp->next;        printf("%d ", temp->data);    }    printf("\n");}//以下內容來自《資料結構與演算法-C語言描述》int IsEmpty(node *p) {    return p->next==NULL;}int IsLast(node *pos,node *p) {    return pos->next==NULL;}//刪除指定位置的元素node *Delete(node *p,int elem) {    node *temp=p;    node *tmp;    while(temp->next) {        if(temp->next->data==elem) {            tmp=temp->next;            temp->next=tmp->next;            free(tmp);        }        temp=temp->next;    }    return p;}//在指定位置插入元素node *Insert(node *p,int pos,int elem) {    node *temp=p;    int i;    for(i=0; i<pos; i++) {        temp=temp->next;    }    node *cell =(node*)malloc(sizeof(node));    cell->data=elem;    cell->next=temp->next;    temp->next=cell;    return p;}//刪除listvoid DeleteList(node *p) {    node *temp=p;    node *tmp;    p->next=NULL;    while(temp->next) {        tmp=temp->next;        free(tmp);        temp=temp->next;    }}int main() {    node *p = initnode();    display(p);    printf("在第4的位置插入元素5:\n");    p = Insert(p, 4, 5);    display(p);    printf("刪除第3個元素:\n");    p = delElem(p, 3);    display(p);    printf("尋找元素2的位置為:\n");    int address = selectElem(p, 2);    if (address == -1) {        printf("沒有該元素\n");    } else {        printf("元素2的位子為:%d\n", address);    }    printf("更改第3的位置的數為7:\n");    p = amendElem(p, 3, 7);    display(p);    printf("delete7\n");    p=Delete(p,7);    display(p);    printf("刪除\n");    DeleteList(p);    display(p);}

 

C語言實現常用資料結構——鏈表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.