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
看看