⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 数据结构课程实践题目
💻 TXT
字号:
#include<stdio.h>
#include<stdlib.h>
#include<process.h>   
#include<conio.h>
#include<string.h>

typedef int  ElemType; //元素类型

typedef struct  LNode
{
	ElemType  num;
	char name[100];
	ElemType telnum;
	char address[100];
	struct  LNode  *next;
}LNode, *LinkList;

void wait()    
{
	printf("\n\n按任意键继续\n");
	getch();
}

void print(LinkList &head)
{//6.输出通讯录信息 
	LNode *p;
	printf("\n现有的通讯录数据为:\n");
	p=head->next;          //head头节点
	if(!p)
		printf("通讯录链表为空。");
	while(p)
	{
		printf("%d ",p->num);
		printf("%s ",p->name);
		printf("%d ",p->telnum);
		printf("%s\n",p->address);
		p=p->next;
	}
}

LNode *InsertNode(LinkList &head,LNode *p)
{//2.通讯录插入操作
	LNode *p1,*p2,*p3;
	p1=head->next;
	p2=p3=head;
	while(p1)
	{
		if(p1->num>p->num)
		{
			p2->next = p;
			p->next = p1;
			break;
		}
		else if(p1->num<p->num)
		{
			p1=p1->next;
			p2=p2->next;
		}
		else if(p1->num==p->num)
		{
			printf("\n该学号已存在!\n");
			return head;
		}
	}
	if(p1==NULL)
	{
		p2->next=p;
		p->next=p1;
	}
	return head;
}

LNode *orderlist()
{//1.利用2这个函数建立通讯录链表 
	LNode *head,*p;
	printf("\n请输入数据(以0为结束标志):\n");
	head=(LNode *)malloc(sizeof(LNode));
	p=(LNode *)malloc(sizeof(LNode));
	head->next=NULL;
	scanf("%d",&p->num);
	scanf("%s",&p->name);
	scanf("%d",&p->telnum);
	scanf("%s",&p->address);
	while(p->num!=0)
	{
		head=InsertNode(head,p);
		p=(LNode *)malloc(sizeof(LNode));
		scanf("%d",&p->num);
		scanf("%s",&p->name);
		scanf("%d",&p->telnum);
		scanf("%s",&p->address);
	}
	return head;
}


LNode *SearchNode1(LinkList &head,int num)   
{//3-1.学号查找方式。查找学号等于num的节点
	LNode *p1,*p2;
	if(head->next == NULL)  //首先判断是否非空链表
	{
       printf("通讯录为空\n");
       return NULL;
    }
	p1 = head->next;
	while(num > p1->num&&p1->next != NULL)  //在链表中查找该num
	{
			p2 = p1;
       		p1 = p1->next;
	}
	if(num == p1->num)
	{//找到后
       printf("\n该学生的信息为:\n");
       printf("%d ",p1->num);
       printf("%s ",p1->name);
       printf("%d ",p1->telnum);
       printf("%s\n",p1->address);
       return p1;
    }
    else
    {
		printf("\n查无此人!\n");  //未找到
	    return NULL;
	}
}

void SearchNode2(LinkList &head,char name[])   
{//3-2.姓名查找方式。查找姓名等于name的节点
	LNode *p1,*p2;
	int f = 0,nf = 0;
	if(head->next == NULL)  //首先判断是否非空链表
	{
       printf("通讯录为空\n");
	   nf = 1;
    }
	if(nf == 0)
	{
		p1 = head->next;
		while(p1 != NULL)  //在链表中查找该name
		{
			if(strcmp(name,p1->name) == 0)
			{//找到后
				printf("\n该学生的信息为:\n");
				printf("%d ",p1->num);
				printf("%s ",p1->name);
				printf("%d ",p1->telnum);
				printf("%s\n",p1->address);
				f = 1;
			}
			p2 = p1;
			p1 = p1->next;
		}
		if(f == 0) 
		{
			printf("\n查无此人!\n");  //未找到
		}
	}
}

void DelNode1(LinkList &head,int num)
{//4-1. 学号查找方式删除
        LNode *p1,*p2;
        p1 = head->next;
        while(num != p1->num&&p1->next != NULL)  //在链表中查找该num
	    {
            p2 = p1;
            p1 = p1->next;
        }
        p1 = SearchNode1(head,num);
        if(p1 != NULL)
        {
              if(p1 == head->next)
	              head->next = p1->next;
              else
                  p2->next = p1->next;
              free(p1);//删除操作
              printf("\n删除完毕!\n");
        }
}

void DelNode2(LinkList &head,char name[])
{//4-2. 姓名查找方式删除
	LNode *p1,*p2;
	int nf = 0;
	SearchNode2(head,name);
	if(head->next == NULL)  //首先判断是否非空链表
	{
	   nf = 1;
    }
	if(nf == 0)
	{
		p2 = p1 = head->next;
		while(p1 != NULL )  //在链表中查找该name
		{
			if(strcmp(name,p1->name) == 0)
			{//找到后
				if(p1 == head->next)
					head->next = p1->next;
				else
				{
					p2->next = p1->next;
				}
				printf("\n删除完毕!\n");
			}
			p2 = p1;
			p1 = p1->next;
		}
	}
}

int main()
{
	LNode *L,*p;
	int i,f=0,c,n,choice;
	char name[100];
	while(1)
	{
		system("cls");
		printf("\t         2.1 通讯录管理系统\n");
		printf("\t                     作者:王有燕\n");
		for (i = 1; i <= 60; i++) 
			printf("=");
		printf("\n");
		printf("\t  1.通讯录链表的建立\n");
		printf("\t  2.通讯者结点的插入\n");
		printf("\t  3.通讯者结点的查询\n");
		printf("\t  4.通讯者结点的删除\n");
		printf("\t  5.通讯录链表的输出\n");
		printf("\t  0.退出管理系统\n");
		for (i = 1; i <= 60; i++) 
			printf("=");
		printf("\n请选择:");
		scanf("%d",&choice);
		switch (choice)
		{
			case 1:
			{
				system("cls");
				printf("------------通讯录输入建立---------------");
				printf("\n说明:\n");
    			printf("格式:学号 姓名 电话号码 地址\n");
    			printf("\n结束标志:0 0 0 0\n");
				printf("\n请输入学生数据(包括学号和姓名):\n");
				L=orderlist();
				f=1;
				wait();
				break;
			}
			case 2:
			{
				system("cls");
				if(f)
				{
					printf("--------------通讯录插入操作----------------\n");
					printf("\n请输入要插入的元素的信息\n");
					p = (LNode *)malloc(sizeof(LNode));
					scanf("%d",&p->num);
					scanf("%s",&p->name);
					scanf("%d",&p->telnum);
					scanf("%s",&p->address);
					L = InsertNode(L,p);
				}
				else
					printf("请先选择1输入数据。");
				wait();
				break;
			}
			case 3:
			{
				system("cls");
				if(f)
				{
                    printf("请选择查找方式:(1.学号查找 2.姓名查找)\n");
                    scanf("%d",&c);
                    if(c == 1)
                    {
                         printf("\n请输入要查询的学生学号:");
                         scanf("%d",&n);
                         SearchNode1(L,n);
                    }
                    if(c == 2)
                    {
                         printf("\n请输入要查询的学生姓名:");
                         scanf("%s",&name);
                         SearchNode2(L,name);
                    }
                	if(c != 1&&c != 2)
                    	printf("\n输入错误!\n");
				}
				else
					printf("请先选择1输入数据。");
				wait();
				break;
			}
			case 4:
			{
				system("cls");
				if(f)
				{
                    printf("请选择查找删除方式:(1.学号查找删除 2.姓名查找删除)\n");
                    scanf("%d",&c);
                    if(c == 1)
                    {
                         printf("\n请输入要删除的学生学号:");
                         scanf("%d",&n);
                         DelNode1(L,n);
                    }
                    if(c == 2)
                    {
                         printf("\n请输入要删除的学生姓名:");
                         scanf("%s",&name);
                         DelNode2(L,name);
                    }
                    if(c != 1&&c != 2)
                    	printf("\n输入错误!\n");
				}
				else
					printf("请先选择1输入数据。");
				wait();
				break;
			}
			case 5:
			{
				system("cls");
                if(f)
				    print(L);
                else
                    printf("请选择1输入数据"); 
				wait();
				break;
			}
			case 0:
			{
				exit(0);
				break;
			}
			default:
            {  
				printf("\n无此选项");
				wait();
            }
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -