데이터 구조의 선형 표 - 단일 체인 표 (자체 테이프 수미 변환)

        --   (      )

SingleList. h 간단 한 헤더 파일 중 Status 는 제 가 뒤에서 사용 하지 않 고 상태 로 만 설명 하 였 습 니 다.
#ifndef SINGLELIST
#define SINGLELIST
typedef int ElemType;
typedef int Status;
typedef struct LinkList 
{
    ElemType date;
    struct LinkList *next;
}LinkNode,*LinkList;//         ,                 
#endif
#include <stdio.h>
#include <stdlib.h>
#include "SingleList.h"
void InitList( LinkList *ppnode)//      
{
    *ppnode = (LinkList)malloc(sizeof(LinkNode));//      *       
    if (!(*ppnode))
    {
        return  -1;
    }
    (*ppnode)->next = NULL;
    printf("     ");
    return 0;
}
int ListLength(LinkList *pnode)//          
{
    int i = 0;
    LinkList p =( *pnode)->next;
    while (p)
    {
        ++i;
        p = p->next;
    }
    return i;
}
Status ClearList(LinkList *pnode)//         ;
{
    LinkList p, q;
    p = (*pnode)->next;
    while (p)
    {
        q = p->next;
        free(p);
        p = q;
    }
    (*pnode)->next = NULL;
    return 1;
}
Status ListDisplay(LinkList *pnode)//       
{
    LinkList p = (*pnode)->next;
    while (p)
    {

        printf("-> %d", p->date);
        p = p->next;
    }
    printf("
"
); return 1; } Status GetElem(LinkNode *pnode,int i,ElemType *e)// i { int j; LinkList p; p = pnode->next; j = 1; while (p&&j < i) { p = p->next; ++j; } if (!p||j>i) { return -1; } *e = p->date; return 1; } int LocateElem(LinkList pnode, ElemType e)// { int i = 0; LinkList p = pnode->next; while (p) { ++i; if (p->date == e) { return i; p = p->next; } return 0; } } void CreatListHead(LinkList *pnode, int n)// { LinkList p; int i; srand(time(0)); (*pnode) = (LinkList)malloc(sizeof(LinkNode)); (*pnode)->next = NULL; for (int i = 0; i < n;i++) { p = (LinkList)malloc(sizeof(LinkNode)); p->date = rand() % 100 + rand() % 50; p->next = (*pnode)->next; (*pnode)->next = p; } } void CreateListTail(LinkList *pnode, int n)// { LinkList p, r; int i; srand(time(0)); pnode= (LinkList)malloc(sizeof(LinkNode)); r = pnode; for (i = 0; i < n; i++) { p = (LinkList)malloc(sizeof(LinkNode)); p->date= rand() % 100 + 1; r->next = p; r = p; } r->next = NULL; } Status ListInsert(LinkList pnode, int i, ElemType e)// i e; { int j=1; LinkList p, q; p = pnode;// while (p&&j<i) { p = p->next; ++j; } if (!p||j>i) { return -1; } q = (LinkList)malloc(sizeof(LinkNode)); q->date = e; q->next = p->next; p->next = q; return 1; } Status ListDelete(LinkList pnode, int i, ElemType *e)// i e { int j = 1; LinkList p, q; p = pnode; while (p||j<i) { p = p->next; ++j; } if (!(p->next)||j>i) { return -1; } q = p->next; p->next = q->next; *e = q->date; free(q); return 1; } Status ListReverseMethod(LinkList pnode)// { LinkList current, pnext, prev; if ((pnode) == NULL || (pnode)->next == NULL) return (pnode); current = pnode->next; pnext = current->next; current->next = NULL; while (pnext) { prev = pnext->next; pnext->next = current; current = pnext; pnext = prev; } (pnode)->next = current; return (pnode); } Status ListReverseMethod2(LinkList pnode) { LinkList current, p; if ((pnode) == NULL) { return NULL; } current = (pnode)->next; while (current->next!=NULL) { p = current->next; current->next = p->next; p->next = (pnode)->next; (pnode)->next = p; ListReverseMethod(pnode); printf("current= %d ,
"
, current->date); } return pnode; } int main(int argc, char **argv) { LinkList Pnode; ElemType e; InitList(&Pnode);// : InitList(LinkList *ppnode); (LinkList pnode ) &pnode CreatListHead(&Pnode, 10); ListDisplay(&Pnode); ListReverseMethod(Pnode); ListDisplay(&Pnode); system("pause"); }

좋은 웹페이지 즐겨찾기