当前位置:编程学习 > C/C++ >>

C语言 单链表问题

要求:建立一个单链表的类,能够实现单链表的以下运算:插入,删除,查找某一元素,逆置,输入,输出以及两个单链表的合并,建立一个循环列表解决约瑟夫环。
生成单链表,从键盘上读取元素,设计一用户界面,使用户能任意选择以上操作


谢谢各位高手了,能帮的尽量帮一下忙,靠这个救命啊!!!3Q
追问:额,我要的是单链表啊,但你这个是一个档案管理系统啊,好像不太符合啊?我是菜鸟,不懂耶,不过还是谢谢你!

答案:这个是我自己大一的时候编的一个程序 希望对你有帮助  郁闷 不能全部弄进去

#include #include #include #define LEN sizeof(struct addbook) #define MAX 100 void InitDialBook(); void UserInterface();/*菜单函数*/ void Load(); void Add(); void Find(); void Modify(); void Delete(); void ShowAll(); void Save(); struct addbook{ int record; char name[15]; char sex[4]; char age[4]; char addr[20]; char phone[15]; char qq[15]; struct addbook *link; }; FILE *fp; struct addbook *p,*p1,*head,*s,*t; char GetChar(const char * str) { char ch; int i,len=strlen(str); while(1) { ch=getch(); for(i=0;ilink!=NULL){ p1 = (struct addbook*)malloc(LEN); p1 = p->link; fread(p1,LEN,1,fp); p = p->link; } } void Add(void)/*输入函数*/ { char ch; p1 = (struct addbook*)malloc(LEN); p1->record = p->record + 1; clrscr(); printf("┌─────────────────────────────────────┐\n"); printf("│ 〖 档案输入 〗 │\n"); printf("├─────────────────────────────────────┤\n"); printf("│ 姓名 性别 年龄 地址 电话 QQ号码 │\n"); printf("│ │\n"); printf("│ 括号里的数字为每项可以输入的最大字符数.每输入一项后按回车结束. │\n"); printf("└─────────────────────────────────────┘\n"); scanf("%s%s%s%s%s", p1->name, p1->sex,p1->age,p1->addr,p1->qq); p1->link = NULL; p->link = p1; p = p1; printf("\n是否继续输入[Y/N]?"); ch=GetChar("YyNn"); if (ch=='N' || ch=='n') { main(); } else Add(); } void ShowAll(void)/*显示所有函数*/ { clrscr(); s = head; clrscr(); printf("┌─────────────────────────────────────┐\n"); printf("│ 〖 档案输入 〗 │\n"); printf("├─────────────────────────────────────┤\n"); printf("│ 序号 姓名 性别 年龄 地址 电话 QQ号码 │\n"); do{ printf("\t %-6d%-10s%-8s%-7s%-10s%-10s%-5s%-7s\n",s->record,s->name,s->sex, s->age,s->addr,s->phone,s->qq); s = s->link; }while(s!=NULL); printf("\n\n\n\t\t\t按任意键退出!"); getch(); return; } void Find(void)/*查找函数*/ { char c,ch; struct addbook who; s = head; clrscr(); printf("\n\t\t请输入要查找人的姓名:"); gets(who.name); while((s->link!=NULL)&&(strcmp(s->name,who.name))) { s = s->link; } if((s->link==NULL)&&(strcmp(s->name,who.name))) { printf("\"%s\" 不存在!\n",who.name); printf("请查对一下姓名再查找.\n"); getch(); return; } clrscr(); printf("\n\t\t\t\要查找的资料如下所示:\n"); printf("┌─────────────────────────────────────┐\n"); printf("│ 〖 档案输入 〗 │\n"); printf("├─────────────────────────────────────┤\n"); printf("│ 序号 姓名 性别 年龄 地址 电话 QQ号码 │\n"); printf("\t %-6d%-10s%-8s%-7s%-8s%-10s%-s%-s\n",s->record,s->name,s->sex,s->age,s->age,s->addr,s->phone,s->qq); printf("\n\t\t删除(d)\修改(m)\浏览一下(s)\n"); printf("\n\t请输入您的选择(d/m/s):"); scanf("%c",&c); switch(c) { case 'D': case 'd':Delete();break; case 'M': case 'm':Modify();break; } printf("\n是否继续输入[Y/N]?"); ch=GetChar("YyNn"); if (ch=='N' || ch=='n') { main(); } else Find(); } void Findqq(void)/*查找函数*/ { char c,ch; struct addbook who; clrscr(); s = head; clrscr(); printf("\n\t\t请输入要查找人的姓名:"); gets(who.name); while((s->link!=NULL)&&(strcmp(s->qq,who.qq))) { s = s->link; } if((s->link==NULL)&&(strcmp(s->qq,who.qq))) { printf("\"%s\" 不存在!\n",who.qq); printf("请查对一下姓名再查找.\n"); getch(); return; } clrscr(); printf("\n\t\t\t\要查找的资料如下所示:\n"); printf("┌─────────────────────────────────────┐\n"); printf("│ 〖 档案 〗 │\n"); printf("├─────────────────────────────────────┤\n"); printf("│ 序号 姓名 性别 年龄 地址 电话 QQ号码 │\n"); printf("\t %-6d%-10s%-8s%-7s%-8s%-10s%-s%-s\n",s->record,s->name,s->sex,s->age,s->age,s->addr,s->phone,s->qq); printf("\n\t\t删除(d)\修改(m)\浏览一下(s)\n"); printf("\n\t请输入您的选择(d/m/s):"); scanf("%c",&c); switch(c) { case 'D': case 'd':Delete();break; case 'M': case 'm':Modify();break; } printf("\n是否继续输入[Y/N]?"); ch=GetChar("YyNn"); if (ch=='N' || ch=='n') { main(); } else Findqq(); } void Modify(void) { clrscr(); printf("┌─────────────────────────────────────┐\n"); printf("│ 〖 档案输入 〗 │\n"); printf("├─────────────────────────────────────┤\n"); printf("│新的姓名(10)新的性别(4)新的年龄(4)新的地址(50) 新的电话(15) 新的QQ号码(12)│\n"); printf("│ │\n"); printf("│ 括号里的数字为每项可以输入的最大字符数.每输入一项后按回车结束. │\n"); printf("└─────────────────────────────────────┘\n"); scanf("%s%s%s%s%s", p1->name, p1->sex,p1->age,p1->addr,p1->qq); printf("\n\t\t修改成功!\n"); getch(); } void Delete(void)/*删除函数*/ { int find_prev; int find_record; char del; char del_member_name[15]; struct addbook *p_del_prev; strcpy(del_member_name,s->name); getchar(); printf("确定要删除%s吗(Y/N)?",del_member_name); scanf("%c",&del); if(del=='n'||del=='N') { return; } find_prev = s->record - 1; find_record = 1; p_del_prev = head; while((p_del_prev->link!=NULL)&&(find_recordlink; find_record++; } /* 如果删除第一位成员 */ if(s->record==1) { if(s->link!=NULL) { head = head->link; s = head; while(s!=NULL) { s->record = s->record - 1; s = s->link; } printf("%d,%s",p->record,p->name); } else if(s->link==NULL){ /* 如果第一位成员是最后一位 */ p = NULL; head = p; if(remove("zzxx.txt")==0){ printf("您已经删除了最后一位成员,通讯录已经清空!\n"); printf("所以,您必须重新建立通讯录!\n"); printf("重新打开程序去建立.\n"); } printf("\n\n\t\t按任意键退出.\n"); getch(); exit(0); } } /* 如果删除最后一位成员 */ else if(s->record==p->record){ p_del_prev->link = NULL; s->link = NULL; p = p_del_prev; } else{ p_del_prev->link = s->link; s->link = NULL; while(p_del_prev->link!=NULL) { p_del_prev = p_del_prev->link; p_del_prev->record = p_del_prev->record -1; } printf("%d\n%d\n",p->record,p->link); } printf("成员 \"%s\" 已经被删除.\n ",del_member_name); getch(); } void Save(void)/*保存文件*/ { s = head; do{ fwrite(s,LEN,1,fp); s = s->link; }while(s!=NULL); } void help() { clrscr(); textcolor(5); cprintf("\n"); cprintf(" ┌──────────────────────────────┐ \n\r"); cprintf(" │ ※ 使用说明 │ \n\r"); cprintf(" ├──────────────────────────────┤ \n\r"); cprintf(" │菜单说明: │ \n\r"); cprintf(" │ 11 输入档案: 增加新的记录,请按提示的格式输入. │ \n\r"); cprintf(" │ 12 删除档案: 删除指定的记录.删除后不能恢复. │ \n\r"); cprintf(" │ 13 修改档案: 修改指定的记录.修改后不能恢复. │ \n\r"); cprintf(" │ 14 显示全部: 显示全部的记录. │ \n\r");; cprintf("

我有这方面的程序,可是我难得再编写菜单,如果你需要的话,我可你发给你,你自己去编写菜单。

上一个:C语言为什么这么红呢?
下一个:用C语言写出如下算法

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,