单链表存储结构创建、插入、删除操作 《大话数据结构》c++代码实现

xiaoxiao2025-05-16  79

 

#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; }

转载请注明原文地址: https://www.6miu.com/read-5030220.html

最新回复(0)