我刚学数据结构,基础不行,上学期的c语言也挂了,求大火看看

需求:给定的线性表为 L= (24,25, 7, 42, 19, 38)。

  1. 实现初始化并建立单链表【前插法或者后插法】
  2. 实现单链表的取值:取第5个元素的值。
  3. 实现单链表的插入:依次插入3,21,15 三个数.分别插入在第 4 ,6和2 位置。每插入一次都要输出一次单链表。
  4. 实现单链表的按值查找:输出 38 存储地址。
  5. 删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。。

供参考:

#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK    1
typedef int Status;
typedef int ElemType;
typedef struct _node {
    ElemType   data;
    struct _node* next;
}Node, * LinkList;

Status CreateList_T(LinkList& L, int i, ElemType a[])//尾插法建立链表
{
    int k;
    LinkList pL = NULL, tail = NULL;
    if (!L) {
        L = (LinkList)malloc(sizeof(Node));
        if (!L) {
            return ERROR;
        }
        L->next = NULL;
    }
    for (pL = L, k = 0; k < i; k++) {
        tail = (Node*)malloc(sizeof(Node));
        tail->next = NULL;
        tail->data = a[k];
        pL->next = tail;
        pL = tail;
    }
    return OK;
}

//实现单链表按位置取元素值
Status GetElem(LinkList L, int i, ElemType& e)
{
    int j = 0;
    LinkList p = L;
    if (!L || i < 1) {
        e = -999;
        return ERROR;
    }
    while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
        p = p->next;
        j++;
    }
    if (!(p->next) || j > i - 1) { e = -999; return ERROR; }
    e = p->next->data;
    return OK;
}

Status ListInsert(LinkList L, int i, ElemType e)
{
    int j = 0;
    LinkList p = L, pt = NULL;
    if (!L || i < 1) 
        return ERROR;
    while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
        p = p->next;
        j++;
    }
    if (!(p->next) || j > i - 1) return ERROR;
    pt = (Node*)malloc(sizeof(Node));
    pt->data = e;
    pt->next = NULL;
    pt->next = p->next;
    p->next = pt;
    return OK;
}

//实现单链表按值查找,返回存储地址
Node* LocateElem(LinkList L, ElemType e)
{
    LinkList p = L;
    if (!L)
        return NULL;
    while (p->next && p->next->data != e) { //寻找第i个结点,并令p指向其前趋结点
        p = p->next;
    }
    if (!p->next) return NULL;
    return p->next;
}

//在带头结点的单链表 L中,删除第 i 个元素,并由e返回其值
Status ListDelete_L(LinkList L, int i, ElemType& e)
{
    int j = 0;
    LinkList p = L, q = NULL;
    if (!L || i < 1) {
        e = -999;
        return ERROR;
    }
    while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
        p = p->next;
        j++;
    }
    if (!(p->next) || j > i - 1) { e = -999; return ERROR; }
    q = p->next;
    p->next = q->next;
    e = q->data;
    free(q);
    return OK;
}

void printList(LinkList L)
{
    LinkList p = L;
    if (!L || !L->next) {
        printf("NULL");
    }
    else {
        while (p->next) {
            printf(p->next == L->next ? "%d" : " %d", p->next->data);
            p = p->next;
        }
    }
    printf("\n");
}

int main()
{
    LinkList L = NULL, pt = NULL;
    ElemType a[6] = { 24,25,7,42,19,38 }, e;
    CreateList_T(L, 6, a);
    printList(L);

    GetElem(L, 5, e);//单链表按位置取元素值
    printf("第%d个元素值为:%d\n", 5, e);

    ListInsert(L, 4, 3);//在第4位置上插入数值3
    printList(L);
    ListInsert(L, 6, 21);//在第6位置上插入数值21
    printList(L);
    ListInsert(L, 2, 15);//在第2位置上插入数值15
    printList(L);

    pt = LocateElem(L, 38);//单链表的按值查找:输出 38 存储地址
    if (pt)
        printf("pt:%p,pt->data=%d\n", pt, pt->data);
    else
        printf("pt:%p\n", pt);

    ListDelete_L(L, 5, e);//删除第5个位置上的元素
    printList(L);
    ListDelete_L(L, 3, e);//删除第3个位置上的元素
    printList(L);
    ListDelete_L(L, 12, e);//删除第12个位置上的元素
    printList(L);
    return 0;
}

这种情况下,应该加上大大的悬赏以解燃眉之急。不然要花更多的补考费

搜索单链表实现,别人实现的代码很多。
除此之外,书上应该也有实现的伪代码之类的。
再不济找个视频学习一下,跟着敲一下。

刚好写了一篇博客,里面的函数你自己模仿者改一改,好的创新者一定是先善于模仿

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633