DC_Wen 发表于 2015-5-10 12:05:01

给力,嘻嘻

wsxukai2013 发表于 2015-5-10 13:18:47

强烈支持楼主ing……

364904690 发表于 2015-5-10 15:25:14

强烈支持楼主ing……

FTD_Chen 发表于 2015-5-10 19:16:40

辛苦了, 小甲鱼:handshake

x072816 发表于 2015-5-10 21:23:31

真是难得给力的帖子啊。

Ⅴac 发表于 2015-5-12 10:27:21

真是难得给力的帖子啊。

2413780002 发表于 2015-5-19 12:39:32

谢谢小甲鱼了

nfmomo 发表于 2015-5-31 00:02:34

强烈支持楼主ing……

牛老根 发表于 2015-6-3 15:58:49

强烈支持楼主ing……

静.待 发表于 2015-6-6 20:41:38

我只是路过打酱油的。

梦梦梦 发表于 2015-6-9 17:17:31

小甲鱼棒棒哒

永卟。放棄ㄟ 发表于 2015-6-12 10:17:17

我会加油学会的

wonderboy430 发表于 2015-6-15 14:00:01

不错,学习了,顶楼主!!!!

231564 发表于 2015-6-17 10:30:42

谢谢小甲鱼

qq134025 发表于 2015-6-21 15:19:16

谢谢

seii 发表于 2015-6-22 10:22:47

谢谢楼主

seii 发表于 2015-6-22 15:32:41

本帖最后由 seii 于 2015-6-22 15:36 编辑

/*****************************/
/** By Seii**/
/*****************************/
#ifndef _LIST_H_
#define _LIST_H_
#include <stdio.h>
#include <stdlib.h>

typedef enum{
        false, true
}bool;

typedef enum{
        ERROR, OK
}status;

typedef int ElemType;
typedef int CursorType;
#define MAXSIZE 10

typedef struct _list{
        ElemType data;
        CursorType cur;
}Component, SLList;

#define _IsEmpty(SSLptr) ((SSLptr).cur==0)
#define _IsFull(SSLptr) ((SSLptr.cur==0))

status InitSLL(SLList list);//初始化
void PrintSLL(const SLList list);//打印
status InsertBackSLL(SLList list, ElemType data);//尾部插入数据
void MoveToLast(SLList list, CursorType *lastCur);//移动到最后一个元素
status InsertFrontSLL(SLList list, ElemType data);//头部插入数据
size_t GetRestSpace(const SLList list);//获取剩余的存储空间
status MoveToPrevPos(const SLList list, int pos, CursorType *target);//移动到pos处的前一个元素
status InsertByPos(SLList list, int pos, ElemType data);//根据位置插入数据
status RemoveByPos(SLList list, int pos);//根据位置删除元素

#endif //_LIST_H_

#include "list.h"

status InitSLL(SLList list){//初始化
        if (list == NULL)return ERROR;
        for (int i = 0; i < MAXSIZE - 1; i++){
                list.cur = i + 1;
                list.data = 0;
        }
        list.data = 0;
        list.cur = 0;
        list.cur = 0;
        return OK;
}

void PrintSLL(const SLList list){//打印
        if (list == NULL)
                puts("***********************该链表无效********************\n");
        else if (_IsEmpty(list))
                puts("***********************该链表为空********************\n");
        else{
                puts("***********************链表数据START********************");
                for (CursorType i = list.cur; i != 0; i = list.cur){
                        printf("%d", list.data);
                }
                putchar('\n');
                puts("***********************链表数据E N D********************\n");
        }
}

status InsertBackSLL(SLList list, ElemType data){//尾部插入数据
        if (list == NULL)return ERROR;
        CursorType last;
        if (_IsEmpty(list))
                list.cur = 1;
        MoveToLast(list, &last);
        list.cur = list.cur;
        list.cur = list.cur].cur;
        list.cur].data = data;
        list.cur].cur = 0;
        return OK;
}

void MoveToLast(SLList list, CursorType *lastCur){//移动到最后一个元素
        if (list == NULL || _IsEmpty(list) || lastCur == NULL)
                *lastCur = 0;
        else{
                *lastCur = list.cur;
                while (list[*lastCur].cur != 0)*lastCur = list[*lastCur].cur;
        }
}

status InsertFrontSLL(SLList list, ElemType data){//头部插入数据
        if (list == NULL || _IsFull(list))return ERROR;
        CursorType newnode = list.cur;
        list.data = data;
        list.cur = list.cur;
        list.cur = list.cur;
        list.cur = newnode;
        return OK;
}

size_t GetRestSpace(const SLList list){//获取剩余的存储空间
        if (list == NULL)return -1;
        size_t count = 0;
        for (CursorType cur = list.cur; cur != 0; cur = list.cur, count++);
        return count;
}

status MoveToPrevPos(const SLList list, int pos, CursorType *target){//移动到pos处的前一个元素
        if (list == NULL)return ERROR;
        *target = MAXSIZE - 1;
        pos--;
        while (pos && *target != 0){
                *target = list[*target].cur;
                pos--;
        }
        if (pos == 0){
                return OK;
        }
        else{
                *target = -1;

                //puts("您的插入超出了范围");

                return ERROR;
        }
}

status InsertByPos(SLList list, int pos, ElemType data){//根据位置插入数据
        if (list == NULL || _IsFull(list))return ERROR;
        CursorType target;
        if (MoveToPrevPos(list, pos, &target)){
                CursorType next = list.cur;
                list.cur = list.cur;
                list.cur = list.cur].cur;
                list.cur].data = data;
                list.cur].cur = next;
                return OK;
        }
        return ERROR;
}

status RemoveByPos(SLList list, int pos){//根据位置删除元素
        if (list == NULL || _IsEmpty(list) || pos < 1)return ERROR;
        CursorType target;
        if (MoveToPrevPos(list, pos, &target)){
                CursorType curTarget = list.cur;
                list.cur = list.cur;
                list.cur = list.cur;
                list.cur = target;
                return OK;
        }
        return ERROR;
}

#include <stdio.h>
#include <stdlib.h>
#include "list.h"

int main(){
        SLList list;
        InitSLL(list);

        for (int i = 0; i < 5; i++){
                InsertFrontSLL(list, i + 1);
        }

        PrintSLL(list);
        printf("rest=%d\n", GetRestSpace(list));

        RemoveByPos(list, 3);


        PrintSLL(list);
        printf("rest=%d\n", GetRestSpace(list));

        system("pause");
        return 0;
}

Anny黄 发表于 2015-6-23 22:19:02

...

溯月0503 发表于 2015-6-24 21:15:06

好牛呀

xiaoyefawen 发表于 2015-7-2 08:04:33

看看
页: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17
查看完整版本: 静态顺序表的各种操作(线性表)