欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 数据结构-DAY04

数据结构-DAY04

2025/5/20 11:00:52 来源:https://blog.csdn.net/Cwcnma/article/details/147989378  浏览:    关键词:数据结构-DAY04

一、make file 工程管理工具
1.1 优点
        在.c文件非常多的情况下,当修改后,只编译被修改的.c文件,节省时间,提高效率

1.2 使用步骤
首先,使用vi Makefile进行代码编写
注意:无论版本1还是版本2,回车之后的,下一行使用Tab键打出空挡
clean 清除文件
敲下make :make会在当前目录下去寻找file,默认走第一条规则;使用make clean 走第二条规则, make clean删除预期文件和中间文件
指定make file的规则文件:make -f Makefile2
1.2.1 版本一

1.2.2 版本二

SRC += main.c
SRC += doulink.c
DST = appCC = gcc
FLAG = -g 
LIB = -lm$(DST):$(SRC)$(CC) $(SRC) $(FLAG) $(LIB) -o $(DST)clean:rm $(DST)

二、练习和例题
1.创建双向链表

struct DouLinkList *CreateDouLinkList()
{struct DouLinkList *dl = malloc(sizeof(struct DouLinkList));if(NULL == dl){fprintf(stderr, "CreatDouLinklist malloc");return NULL;}dl->head = NULL;dl->clen = 0;return dl;
}

2.双向链表-头插法

int  InsertHeadDouLinkList(struct DouLinkList *dl, struct DATATYPE *data)
{struct DouNode *newnode = malloc(sizeof(struct DouNode));if(NULL == newnode){fprintf(stderr, "CreatDouLinklist malloc");return 1;}memcpy(newnode, data, sizeof(struct DATATYPE));newnode->next = NULL;newnode->next = dl->head;if(dl->head){dl->head->prev = newnode;}dl->head = newnode;dl->clen++;return 0;
}

3.双向链表-遍历

int ShowDouLinkList(struct DouLinkList *dl, DIR dir)
{struct DouNode *tmp = dl->head;if(FORWARD == dir){while(tmp){printf("%s %c %d %d\n",tmp->data.name,tmp->data.sex,tmp->data.age,tmp->data.score);tmp = tmp->next;}}else if(BACKWARD == dir){while(tmp->next){tmp = tmp->next;}while(tmp){printf("%s %c %d %d\n",tmp->data.name,tmp->data.sex,tmp->data.age,tmp->data.score);tmp = tmp->prev;}}return 0;
}

4.双向链表-尾插法

int InsertTailDouLinkList(struct DouLinkList *dl, struct DATATYPE *data)
{struct DouNode *tmp = dl->head;if(IsEmptyDouLinkList(dl)){return InsertHeadDouLinkList(dl, data);}else{while(tmp->next){int IsEmptyDouLinkList(struct DouLinkList *dl);tmp = tmp->next;}struct DouNode *newnode = malloc(sizeof(struct DouNode));if(NULL == newnode){fprintf(stderr, "CreatDouLinklist malloc");return 1;}memcpy(newnode, data, sizeof(struct DATATYPE));newnode->next = NULL;newnode->prev = NULL;newnode->prev = tmp;tmp->next = newnode;dl->clen++;}return 0;
}

5.双向链表-按位置插

int InsertPosLinkList(struct DouLinkList *dl, struct DATATYPE *data, int pos)
{int len = GetSizeofDouLinkList(dl);if(0 == pos){return InsertHeadDouLinkList(dl, data);}else if(len == pos){return InsertTailDouLinkList(dl, data);}else{struct DouNode *tmp = dl->head;struct DouNode *newnode = malloc(sizeof(struct DouNode));if(NULL == newnode){fprintf(stderr, "CreatTailDouLinklist malloc");return 1;}memcpy(&newnode->data, data, sizeof(struct DATATYPE));newnode->next = NULL;newnode->prev = NULL;for(int i = 0; i < pos; ++i){tmp = tmp->next;}newnode->next = tmp;newnode->prev = tmp->prev;tmp->prev = newnode;newnode->prev->next = newnode;dl->clen++;}return 0;
}

6.双向链表-查找

struct DouNode *FindDouLinkList(struct DouLinkList *dl, char *name)
{struct DouNode *tmp = dl->head;while(tmp){if(0 == strcmp(tmp->data.name, name)){return tmp;}tmp = tmp->next;}return NULL;
}

7.修改-双向链表

int ModfiyDouLinkList(struct DouLinkList *dl, char *name, struct DATATYPE *data)
{struct DouNode *ret = FindDouLinkList(dl, name);if(NULL == ret){return 1;}memcpy(&ret->data, data, sizeof(struct DATATYPE));return 0;
}

8.销毁-双向链表

int DestroyDouLinkList(struct DouLinkList** dl)
{while(1){struct DouNode *tmp = (*dl)->head;if(NULL == tmp){break;}(*dl)->head = (*dl)->head->next;free(tmp);}free(*dl);*dl = NULL;return 0;
}

9.删除-双向链表

int DeleteDouLinkList(struct DouLinkList* dl,char* name)
{struct DouNode *tmp = FindDouLinkList(dl, name);if(NULL == tmp){return 1;}memcpy(&tmp->data.name, name, sizeof(struct DATATYPE));if(tmp == dl->head){tmp->next->prev = NULL;dl->head = tmp->next;free(tmp);     }else if(tmp->next == NULL){tmp->prev->next = NULL;free(tmp);}else{tmp->next->prev = tmp->prev;tmp->prev->next = tmp->next;free(tmp);}dl->clen--;return 0;
}

10.双向链表的逆序

int RevertDouLinkList(struct DouLinkList* dl)
{struct DouNode *Prev = NULL;struct DouNode *tmp = dl->head;struct DouNode *Next = tmp->next;int len = GetSizeofDouLinkList(dl);if(len < 2){return 1;}while(1){tmp->next = Prev;tmp->prev = Next;Prev = tmp;tmp = Next;if(NULL == tmp){break;}Next = Next->next;}dl->head = Prev;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词