考研数据结构与算法----单链表的创建和读取(2)

来源:互联网 发布:工厂erp系统源码 编辑:程序博客网 时间:2024/05/24 03:49

    接着今天中午的内容,还是那段代码,加入了链表的插入和删除还有整表删除,个人感觉单个元素的删除不太好;理解。

#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef int ElemType;typedef struct Node{    ElemType data;    struct Node *next;}Node;typedef struct Node *LinkList;Status GetElem(LinkList L, int i, ElemType *e);Status ListInsert(LinkList *L, int i, ElemType e);Status ListDelete(LinkList *L, int i, ElemType *e);Status InitList(LinkList *L, int n);Status FreeList(LinkList *L);void ShowList(LinkList L);int main(void){    LinkList myList;    InitList(&myList, 9);    ElemType t;    GetElem(myList, 1, &t);    printf("%d",t);    printf("\n");    ShowList(myList);    ListInsert(&myList, 3, 99);    ShowList(myList);ListDelete(&myList, 10, &t);ShowList(myList);FreeList(&myList);    system("pause");}Status GetElem(LinkList L, int i, ElemType *e){    int j = 1;    LinkList p;    p = L->next;    while(p && j<i)    {        p = p->next;        j++;    }    if(!p || j>i)    {        return ERROR;    }    *e = p->data;    return OK;}Status ListInsert(LinkList *L, int i, ElemType e){    int j = 1;    LinkList p,s;    p = *L;    while(p&&j<i)    {        p = p->next;        j++;    }    if(!p||j>i)    {        return ERROR;    }    s = (LinkList)malloc(sizeof(Node));    s->data = e;    s->next = p->next;    p->next = s;    return OK;}Status InitList(LinkList *L, int n){    LinkList p,r;    int i;    *L =(Node *)malloc(sizeof(Node));    r = *L;    for(i=0; i<=n; i++)    {        p = (Node*)malloc(sizeof(Node));        p->data = i+1;        r->next = p;        r = p;    }    r->next = NULL;    return OK;}void ShowList(LinkList L){    LinkList p;    p = L->next;    while(p->next)    {        printf("%d\t", p->data);        p = p->next;    }printf("\n");}Status ListDelete(LinkList *L, int i, ElemType *e){    LinkList p,s;p = *L;int j = 1;while(j<i && p->next){p = p->next;j++;}if( (!p->next) || j>i )return ERROR;s = p->next;p->next = s->next;*e = s->data;free(s);return OK;}Status FreeList(LinkList *L){LinkList p,q;p = (*L)->next;while(p){q = p->next;free(p);p = q;}(*L)->next = NULL;return OK;}
  PS:CodeBlocs实在是用不惯,换回了VS 10,嗯 没别得了。

0 0
原创粉丝点击