网站栅格化怎么做,景洪网站建设,wordpress前台文章增加编辑器,在线妇科免费咨询前言
之前写了很多次通讯录#xff0c;一次比一次复杂#xff0c;从静态到动态#xff0c;再到文件操作#xff0c;再到顺序表#xff0c;今天要好好复习一下单链表#xff0c;于是乎干脆用单链表再写一遍。
首先我们之前已经用单链表写过他的增删查改了#xff0c;于…前言
之前写了很多次通讯录一次比一次复杂从静态到动态再到文件操作再到顺序表今天要好好复习一下单链表于是乎干脆用单链表再写一遍。
首先我们之前已经用单链表写过他的增删查改了于是乎我们应该在此基础之上进行修改而不是从头开始写先把之前的增删查改拿出来
——王子公主请看——
SLT.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #includeassert.h #includestdio.h #includestdlib.h #includestring.h #includecontact.h typedef PeoInfo SLTDataType; typedef struct SListNode { SLTDataType val; struct SListNode* next; }SLTNode; //打印数据内容 //void SLTPrint(SLTNode* phead); //创建对应类型变量 SLTNode* creat(SLTDataType x); //头部插入删除/尾部插入删除 void SLTPushBack(SLTNode** pphead, SLTDataType x); void SLTPushFront(SLTNode** pphead, SLTDataType x); void SLTPopBack(SLTNode** pphead); void SLTPopFront(SLTNode** pphead); 查找 //SLTNode* SLTFind(SLTNode* phead, SLTDataType x); //在指定位置之前插入数据 void SLTInsertFront(SLTNode** pphead, SLTNode* pos, SLTDataType x); //删除pos节点 void SLTErase(SLTNode** pphead, SLTNode* pos); //在指定位置之后插入数据 void SLTInsertAfter(SLTNode* pos, SLTDataType x); //删除pos之后的节点 void SLTEraseAfter(SLTNode* pos); //销毁链表 void SLTDesTroy(SLTNode** pphead); SLT.c #includeSLT.h //SLTNode* creat(SLTDataType x) //{ // SLTNode* p malloc(sizeof(SLTNode)); // p-val x; // p-next NULL; // return p; //} SLTNode* creat(SLTDataType x) { SLTNode* p malloc(sizeof(SLTNode)); p-val x; p-next NULL; return p; } //void SLTPrint(SLTNode* phead) //{ // while (phead) // { // printf(%d , phead-val); // phead phead-next; // } // puts(); //} //尾部插入 void SLTPushBack(SLTNode** pphead, SLTDataType x) { assert(pphead); if (*pphead NULL) *pphead creat(x); else { while ((*pphead)-next) { *pphead (*pphead)-next; } (*pphead)-next creat(x); } } //头部插入 void SLTPushFront(SLTNode** pphead, SLTDataType x) { assert(pphead); if (*pphead NULL) if (*pphead NULL) *pphead creat(x); else { SLTNode* new (*pphead); *pphead creat(x); (*pphead)-next new; } } //尾部删除 void SLTPopBack(SLTNode** pphead) { assert(pphead); assert(*pphead); if (((*pphead)-next) NULL) *pphead NULL; else { while ((*pphead)-next-next) { (*pphead) (*pphead)-next; } free((*pphead)-next); (*pphead)-next NULL; } } //头部删除 void SLTPopFront(SLTNode** pphead) { assert(pphead); assert(*pphead); SLTNode* new (*pphead)-next; free(*pphead); *pphead new; } //查找 //SLTNode* SLTFind(SLTNode* phead, SLTDataType x) //{ // while (pheadphead-val ! x) // phead phead-next; // if (phead NULL) // { // printf(你要找的内容不存在\n); // return 0; // } // return phead; //} //在指定位置之前插入数据 void SLTInsertFront(SLTNode** pphead, SLTNode* pos, SLTDataType x) { assert(pphead); assert(*pphead); assert(pos); if ((*pphead) pos) { *pphead creat(x); (*pphead)-next pos; } else { while ((*pphead)-next ! pos) { *pphead (*pphead)-next; } SLTNode* new (*pphead)-next;//不对劲!!!!!! (*pphead)-next creat(x); (*pphead)-next-next pos; } } //删除pos节点 void SLTErase(SLTNode** pphead, SLTNode* pos) { assert(pphead); assert(*pphead); if (*pphead pos) { free(pos); *pphead NULL; } else { while ((*pphead)-next ! pos) *pphead (*pphead)-next; (*pphead)-next (*pphead)-next-next; free(pos); pos NULL; } } //在指定位置之后插入数据 void SLTInsertAfter(SLTNode* pos, SLTDataType x) { assert(pos); SLTNode* new pos-next; pos-next creat(x); pos-next-next new; } //删除pos之后的节点 void SLTEraseAfter(SLTNode* pos) { assert(pos); SLTNode* new pos-next; pos-next pos-next-next; free(new); } //销毁链表 void SLTDesTroy(SLTNode** pphead) { assert(pphead); while (*pphead ! NULL) { SLTNode* p (*pphead)-next; free(*pphead); *pphead p; } } contact.h #pragma once #define NAME_MAX 100 #define SEX_MAX 10 #define TEL_MAX 20 #define ADDR_MAX 100 struct SListNode; //前置声明 typedef struct SListNode contact; //用户数据 typedef struct PersonInfo { char name[NAME_MAX]; char sex[SEX_MAX]; int age; char tel[TEL_MAX]; char addr[ADDR_MAX]; }PeoInfo; typedef PeoInfo SLTDataType; //创建对应数据类型 contact* creatt(void); //初始化通讯录 void InitContact(contact** con); //添加通讯录数据 void AddContact(contact** con); //删除通讯录数据 void DelContact(contact** con); //展示通讯录数据 void ShowContact(contact* con); //查找通讯录数据 void FindContact(contact* con); //修改通讯录数据 void ModifyContact(contact** con); //销毁通讯录数据 void DestroyContact(contact** con); contact.c #includeSLT.h SLTNode* creatt(void) { SLTDataType a; printf(输入名字\n); gets(a.name); printf(输入地址\n); gets(a.addr); printf(输入性别\n); gets(a.sex); printf(输入电话\n); gets(a.tel); printf(输入年龄\n); scanf(%d, a.age); getchar(); SLTNode*p creat(a); return p; }; //初始化通讯录 void InitContact(contact** con) { /* FILE*pfopen(contact, rb);*/ *con (contact*)malloc(sizeof(contact)); /* contact* new con; if (p ! NULL) do { contact* ps (contact*)(sizeof(contact)); if (fread(ps, sizeof(contact), 1, p)) new-next ps; }*/ } //添加通讯录数据 void AddContact(contact** con) { *con creatt(); } //删除通讯录数据 void DelContact(contact** con) { SLTPopBack(con); } //展示通讯录数据 void ShowContact(contact* con) { printf(姓名\t地址\t性别\t电话\t年龄\n); while (con) { printf(%s \t, con-val.name); printf(%s \t, con-val.addr); printf(%s \t, con-val.sex); printf(%s \t, con-val.tel); printf(%d , con-val.age); puts(); con con-next; } } //查找通讯录数据 void FindContact(contact* con) { printf(输入你要找的人名\n); char arr[20]; gets(arr); if (con NULL) printf(通讯录空了\n); else { while (constrcmp(con-val.name, arr)) { con con-next; } if (con ! NULL) { printf(姓名\t地址\t性别\t电话\t年龄\n); printf(%s \t, con-val.name); printf(%s \t, con-val.addr); printf(%s \t, con-val.sex); printf(%s \t, con-val.tel); printf(%d , con-val.age); puts(); } else printf(没找到\n); } } //修改通讯录数据 void ModifyContact(contact** con) { printf(输入你修改的人名\n); char arr[20]; gets(arr); if (*con NULL) printf(通讯录空了\n); else { while (*constrcmp((*con)-val.name, arr)) { *con (*con)-next; } if (*con NULL) printf(没找到这个人\n); else { (*con) creatt(); printf(修改成功\n); } } } //销毁通讯录数据 void DestroyContact(contact** con) { SLTDesTroy(con); } main函数 #includeSLT.h int main() { contact* pNULL; InitContact(p); AddContact(p); //删除通讯录数据 //DelContact(p); //展示通讯录数据 ShowContact(p); //查找通讯录数据 FindContact(p); //修改通讯录数据 ModifyContact(p); //销毁通讯录数据 DestroyContact(p); } 好啦之前写过详细的通讯录解析所以这个就直接上答案了。
感谢观看