单链表

来源:互联网 发布:论文查重软件 编辑:程序博客网 时间:2024/06/05 09:50

只附带了,建立,插入,遍历,查找一个,删除一个,删除整个。很简单的单链表。只是做回忆复习用。

建立链表:

typedef struct Node{    int datashuzi;    struct Node *pNext;}Node,*pNode;pNode creat_list(void) {    int len;    int i;    int val;    pNode list;    pNode pHead = (pNode)malloc(sizeof(Node));    if (NULL == pHead) {        printf("内存不足");        exit(-1);    }    else {        pNode pTail = pHead;        pHead->pNext = NULL;        printf("输入链表长度\n");        scanf("%d", &len);        for (i = 0; i < len; i++) {            pNode p = (pNode)malloc(sizeof (Node));            if(NULL == p) {                printf("内存不足\n");                exit(-1);            }            else {                printf("请输入此次数值\n");                scanf("%d", &val);                p->datashuzi = val;                pTail->pNext = p;                p->pNext = NULL;                pTail = p;            }        }    }    return pHead;} //建立链表

寻找节点

pNode findp(pNode pHead, int pos) {    int i = 0;    pNode p = pHead;    while (i<=pos - 1) {            if (p->pNext == NULL) {             printf("输入的值为大于链表长度的,将默认为最后一个元素\n");            break;        }        p = p->pNext;        i++;    }    return p;}//返回的指针指向第pos个元素

遍历所有和查看单个

void showlist(pNode pHead){    pNode p = pHead->pNext;    int i = 0;    while (p != NULL) {         printf("第%d元素内所含数据为%d\n",i+1, p->datashuzi);        i++;        p = p->pNext;    }}void showone(pNode pHead, int pos) {    pNode p = findp(pHead, pos);    printf("您要找的元素内所含数据为:%d\n", pos, p->datashuzi);}

插入

void Insert_list(pNode pHead, int pos, int val) {    pNode q = (pNode)malloc(sizeof(Node));    pNode p = findp(pHead, pos);    q->datashuzi = val;    q->pNext = p->pNext;    p->pNext = q;}//插入操作,插入在pos个元素前

删除单个,与删除所有

void Delete_list(pNode pHead, int pos) {    pNode p = findp(pHead, pos-1);    p->pNext = p->pNext->pNext;}void Delete_all(pNode pHead) {    pNode tempp, p;    p = pHead;    while (p != NULL) {        tempp = p;        p = p->pNext;        free(tempp);    }}

头文件与main函数

#include <stdio.h>#include <stdlib.h>int main() {    int l = 0;    pNode p=NULL;    int temp, temp2;    while (l != 9) {        printf("请输入你想要的服务:\n1,建立链表\n2,游览所有数据\n3,查看某一数据\n4,插入数据\n5,删除数据\n6,删除整个链表\n\n9,结束程序\n(提示:请先建立链表)\n");        scanf("%d", &l);        if (p == NULL && l != 1)            printf("请先建立链表\n");        else {            switch (l) {            case 1: if (p != NULL) { printf("已经建立了,若想建立,请删除整个链表"); break; }                p = creat_list(); break;            case 2: showlist(p);break;            case 3: printf("输入第几个元素\n");                scanf("%d", &temp);                showone(p, temp);                break;            case 4: printf("请输入填充在第几个元素之后,要增加的数据,中间以“,”隔开");                scanf("%d,%d", &temp, &temp2);                Insert_list(p, temp, temp2);                break;            case 5:printf("输入第几个元素\n");                scanf("%d", &temp);                Delete_list(p, temp);                break;            case 6:Delete_all(p);                p = NULL;                break;            default:printf("输入有误");                break;            }        }    }}