注册 登录
编程论坛 数据结构与算法

数据结构新人,书上给的都是带模板的伪代码,求大家随便给个单链表的简单程序,学习一下

小灰i小白 发布于 2011-11-13 17:14, 1251 次点击
书上的代码都不可以运行,大家给个单链表的简单程序,学习学习.谢谢哈
6 回复
#2
绿茶盖儿2011-11-13 21:31
学了C语言再学数据结构,写个链表不难吧
#3
小灰i小白2011-11-13 22:47
回复 2楼 绿茶盖儿
给嘛给嘛给嘛
#4
小鱼儿c2011-11-14 10:30
我在这个发过资料 你自己出看
https://bbs.bccn.net/thread-354886-1-1.html
#5
心灵百合2011-11-15 17:10
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

// 单链表结点结构
typedef struct node
{
    int data;
    struct node *next;
} NODE, *NODEP;

NODEP InitList(void);
void InsertList(NODEP pHead, int x, int i);
void DeleteList(NODEP pHead, int i);
void PrintList(NODEP pHead);
void ClearList(NODEP pHead);

void main(void)
{
    int iNo, iX;
    char chItem;
    NODEP pHead;
   
    pHead = InitList();

    while (1)
    {
        system("cls");

        printf("    1--插入结点             \n");
        printf("    2--删除结点             \n");
        printf("    3--显示结点             \n");
        printf("    0--退出             \n");
        printf("                     \n");
        printf("    请输入选项(0-3):  ");

        chItem = getche();
        switch (chItem)
        {
            case '1':
                printf("\n请输入插入位置:");
                scanf("%d", &iNo);
                printf("\n请输入要插入的数据元素:");
                scanf("%d", &iX);               
                InsertList(pHead, iX, iNo);
                break;
            case '2':
                printf("\n请输入删除元素的序号:");
                scanf("%d", &iNo);
                DeleteList(pHead, iNo);
                break;
            case '3':
                PrintList(pHead);
                break;
            case '0':
                printf("\n退出程序!\n");
                ClearList(pHead);
                exit(0);
            default:
                printf("\n选项不正确!");
        }

        printf("\n按任意键继续...");
        getch();
    }
}

// 初始化单链表为空表
NODEP InitList(void)
{
    NODEP pHead;

    pHead = (NODEP)malloc(sizeof(NODE));
    if (pHead == NULL)
    {
        printf("内存分配失败!\n");
        exit(0);
    }
    pHead->next = NULL;

    return pHead;
}

// 将结点 x 插入到单链表 pHead 的第 i 个位置
void InsertList(NODEP pHead, int x, int i)
{
    NODEP P,S;
    int j=0;

    P=pHead;

    while((P!=NULL) && (j<I-1))
    {
        P=P->next;
        j++;
    }
    if(P==NULL)
        printf("第 i-1 个结点不存在",i);
    else
    {
        S=(NODEP)malloc(sizeof(NODE));
        S->data=x;
        S->next=P->next;
        P->next=S;
    }
}

// 删除单链表 pHead 的第 i 个结点
void DeleteList(NODEP pHead, int i)
{
    NODEP P,Q;
    int j=0;

    P=pHead;

    while((P!=NULL) && (j<I-1))
    {
        P=P->next;
        j++;
    }
    if(P==NULL)
        printf("第 i-1 个结点不存在",i);
    else
    {
        Q=P->next;
        P->next=Q->next;
        free(Q);
    }
}

// 显示单链表
void PrintList(NODEP pHead)
{
    NODEP pCur;

    printf("\nOutput: ");

    pCur = pHead->next;
    while (pCur != NULL)
    {
        printf("%d ", pCur->data);
        pCur = pCur->next;
    }

    printf("\n");
}

// 销毁单链表
void ClearList(NODEP pHead)
{   
    NODEP pCur, pTemp;

    pCur = pHead;

    while (pCur != NULL)
    {
        pTemp = pCur;
        pCur = pCur->next;
        free(pTemp);
    }
}
#6
小灰i小白2011-11-15 19:51
回复 5楼 心灵百合
谢谢哈
#7
小灰i小白2011-11-15 20:01
回复 5楼 心灵百合
能不能给个C++模板写的简单代码啊,谢了哈
1