单链表的创建(头插法尾插法),插入,删除

来源:互联网 发布:马士兵大数据视频 编辑:程序博客网 时间:2024/06/05 15:01
<span style="font-size:18px;">#include <iostream>#include <cstdio>#include <stdlib.h>using namespace std;typedef int ElemType;typedef struct Node{    ElemType data;    struct Node *next;}Node,*LinkedList;//把struct Node *定义为新类型LinkList,是一个结构体的指针。void InitLinkedList(){    Node *L;    L=(Node *)malloc(sizeof(Node));    if(L==NULL)    printf("申请空间失败");    L->next = NULL;}LinkedList CreateLinkedListHead(int n)//头插法{    int i;    int x;    Node *L;    L=(Node *)malloc(sizeof(Node));    L->next = NULL;    printf("输入元素:");    for(i=0;i<n;i++)    {        Node *p;        p=(Node *)malloc(sizeof(Node));        scanf("%d",&x);        p->data = x;        p->next = L->next;        L->next = p;    }    return L;}LinkedList CreateLinkedListTail(int n)//尾插法{    int x;    Node *L;    L=(Node *)malloc(sizeof(Node));    L->next = NULL;    Node *r;    r=L;    printf("输入元素:");    while(n--)    {        scanf("%d",&x);        Node *p;        p=(Node *)malloc(sizeof(Node));        p->data = x;        r->next = p;        r=p;    }    r->next = NULL;    return L;}void InsertLinkedList(LinkedList L,int i,ElemType x)//插入元素{    LinkedList p;    p=L;    int j;    j=1;    while(j<i)    {        p=p->next;        j++;    }    Node *s;    s=(Node *)malloc(sizeof(Node));    s->data = x;    s->next = p->next;    p->next = s;}void output(LinkedList L){    Node *p;    for(p=L->next;p!=NULL;p=p->next)    {        printf("%d",p->data);    }}void deleteLinkedList(LinkedList L,int i)//删除i位置上的元素{    int j;     LinkedList p,q;     p=L;     j=1;     while(j<i)     {         p=p->next;         j++;     }     q=p->next;     p->next = p->next->next;     free(q);}int GetElem(LinkedList L,int i)//获取元素{    ElemType e;    int j;    LinkedList p;    p=L->next;    j=1;    while(p && j<i)    {        p=p->next;        j++;    }    if(!p || j>i)        printf("第%d个节点不存在\n",i);    e=p->data;    return e;}void ClearList(LinkedList L){    LinkedList p,q;    p=L->next;    while(p)    {        q=p->next;        free(p);        p=q;    }    L->next=NULL;}int main(){    int n;    int i;    int x;    LinkedList H;    printf("输入单链表的长度(头插法):");    scanf("%d",&n);    H=CreateLinkedListHead(n);    output(H);    printf("\n");    printf("输入单链表的长度(尾插法):");    scanf("%d",&n);    H=CreateLinkedListTail(n);    output(H);    printf("\n");    printf("输入要获取哪一位置的元素:");    scanf("%d",&i);    printf("%d\n",GetElem(H,i));    printf("输入要插入的元素e与位置i:");    scanf("%d %d",&x,&i);    InsertLinkedList(H,i,x);    output(H);    printf("\n");    printf("输入要删除哪一位置上的元素:");    scanf("%d",&i);    deleteLinkedList(H,i);    output(H);    printf("\n是否要整表删除1/0?\n");    scanf("%d",&x);    if(x==1)    {        ClearList(H);        printf("单链表为:");        output(H);    }else    {        printf("单链表仍为:");        output(H);    }    return 0;}</span>
<span style="font-size:18px;">顺序存储结构与单链表结构的区别:</span>
<span style="font-size:18px;">顺序存储结构是用一段连续的存储单元存储的,而单链表是用离散的存储单元存储的。</span>
<span style="font-size:18px;">顺序存储结构适用于频繁的进行查找操作,而很少进行插入删除操作。</span>
<span style="font-size:18px;">当要频繁的进行插入删除操作时,就要选取单链表结构。</span>
<span style="font-size:18px;">顺序存取结构需要预先申请空间。而单链表不需要,元素个数也不受限制。</span>
                                             
0 0
原创粉丝点击