链表的简单实现

#include <cstdio>
#include <malloc.h>

typedef int ElemType;

typedef struct ListNode
{
    ElemType Element;
    ListNode *next;
} *PNode;

//创建链表
PNode CreateList(void)
{
    int len; // 链表长度
    int val; //存放链表数值
    PNode PHead = (PNode) malloc (sizeof(PNode)); //头结点
    PNode PTail = PHead; //尾节点
    PTail -> next = NULL;
    printf("请输入结点个数\n");
    scanf("%d",&len);
    for (int i = 0; i < len; i++)
    {
        PNode PNew = (PNode) malloc (sizeof(PNode));
        if (PNew == NULL)
        {
            printf("分配新节点失败\n");
            return 0;
        }
        printf ("请输入第%d个节点的数据\n",i);
        scanf("%d",&val);

        PNew -> Element = val;
        PTail -> next = PNew;
        PNew -> next = NULL;
        PTail = PNew;

    }
    printf ("创建链表成功!\n");
    return PHead; //返回头节点
}
//插入元素
void InsertList (PNode p, int pos, int elem)
{
    PNode k = (PNode) malloc (sizeof(PNode));
    PNode q = p;
    for (int i = 0; i< pos - 1; i++)
    {
        q = q->next;
    }
    k ->Element = elem;
    k-> next = q -> next;
    q->next = k;
}
//删除元素
void DeleteList(PNode p, int pos)
{
    PNode q = p;
    for (int i = 0; i < pos - 1; i++)
    {
        q = q ->next;
    }
    q -> next = q -> next ->next;

}
//free链表
void FreeList(PNode p)
{
    int i;
    while(p != NULL)
    {
        free(p);
        p = p->next;
        //printf ("%d\n",i++);
    }
}
void Print (PNode p)
{
    printf ("输出链表的值\n");
    PNode q = p -> next;
    while (q != NULL)
    {
        printf("%d\n",(q -> Element));
        q = q ->next;
        
    }
}

int main()
{
    ElemType data;
    int pos;
    PNode List = CreateList();

    Print(List);
    printf("插入操作,请输入插入的位置和数字\n");
    scanf("%d%d",&pos,&data);
    InsertList(List,pos,data);
    Print (List);
    printf("删除操作,输入删除的位置\n");
    scanf("%d",&pos);
    DeleteList(List,pos);
    Print (List);

    FreeList(List);
    return 0;
}

 输出结果

(对有时间学习编程的人士强烈推荐vscode,界面美观,并且能学到很多底层的东西)

posted @ 2019-03-11 15:51  VenRay  阅读(120)  评论(0编辑  收藏  举报