C语言通讯录之链表

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define N 3

typedef struct node
{
   char name[20];
   struct node *next;
}stud;

stud* Creat(int n)
{
   stud *h,*s,*p;
   int i;
   if((h=(stud *)malloc(sizeof(stud)))==NULL)
   { 
	   printf("内存不够!");
       exit(0);
   }
   h->name[0]='\0';
   h->next=NULL;
   p=h;
   for(i=0;i<n;i++)
   {
      if((s=(stud *)malloc(sizeof(stud)))==NULL)
      {
	   printf("内存不够!");
	   exit(0);
	  }
	  p->next=s;
      printf("请输入第%d个人的姓名",i+1);
      scanf("%s",s->name);
      s->next=NULL;
      p=s;
    }
    return (h);
}

stud* Search(stud *h,char *y)
{
   stud *p;
   p=h->next;
   while(p!=NULL)
   {
      if(strcmp(p->name,y)==0)
       return (p);  
      else
       p=p->next;      
    }
   if(p==NULL)
   printf("未查找到该同学数据!");
   return 0;
}

stud* SearchFore(stud *h,char *y)
{
   stud *s,*p;
   p=h->next;
   s=p->next;
   while(s!=NULL)
   {
      
      if(strcmp(s->name,y)==0)
       return (p);  
      else
	  {
       p=p->next;    
       s=s->next;	   
      }
   }
   if(s==NULL)
   printf("未查找到该同学数据!");
   return 0;
}

void Insert(stud *p)
{
   stud *s;


   if((s=(stud *)malloc(sizeof(stud)))==NULL)
   {
     printf("内存不够!");
     exit(0);
   }
   printf("\n请输入你要插入的人的姓名:");
   scanf("%s",s->name);
 
   s->next=p->next;
   p->next=s;
}

void Skim(stud *h)
{
   stud *p;
   p=h->next;
   while(p)
    {
       printf("%s",p->name);
       p=p->next;
     }
}

void Del(stud *x,stud *y)
{ 
   stud *s;
   s=y;
   x->next=y->next;
   free(s);
}


void Quit()
{
      exit(0);
}

void menu(void)
{
   system("cls");
printf("\t\t\t单链表C语言实现实例\n");
printf("\t\t————————————————\n");
printf("\t\t \n");
printf("\t\t [1] 建 立 新 表 \n");
printf("\t\t [2] 查 找 数 据 \n");
printf("\t\t [3] 插 入 数 据 \n");
printf("\t\t [4] 删 除 数 据 \n");
printf("\t\t [5] 打 印 数 据 \n");
printf("\t\t [6] 退 出 \n");
printf("\t\t \n");
printf("\t\t 如未建立新表,请先建立! \n");
printf("\t\t \n");
printf("\t\t————————————————\n");
printf("\t\t 请输入你的选项(1-6):");
}

void main()
{
   int choose;
   stud *head,*searchpoint,*forepoint;
   char fullname[20];
 
   while(1)
   {
      menu();
      scanf("%d",&choose);
      switch(choose)
       {
		 case 1:head=Creat(N);
        		break;
		 case 2:printf("输入你所要查找的人的姓名:");
				scanf("%s",fullname);
			    searchpoint=Search(head,fullname);
			    printf("你所查找的人的姓名为:%s",*&searchpoint->name);
			    printf("\n按回车键回到主菜单。");
			    getchar();getchar();
			    break;
		case 3: printf("输入你要在哪个人后面插入:");
				scanf("%s",fullname);
				searchpoint=Search(head,fullname);
				printf("你所查找的人的姓名为:%s",*&searchpoint->name);
				Insert(searchpoint);
				Skim(head);
				printf("\n按回车键回到主菜单。");
				getchar();getchar();
				break;
		case 4: Skim(head);
			    printf("\n输入你所要删除的人的姓名:");
			    scanf("%s",fullname);
			    searchpoint=Search(head,fullname);
			    forepoint=SearchFore(head,fullname);
			    Del(forepoint,searchpoint);
			    break;
		case 5: Skim(head);
			    printf("\n按回车键回到主菜单。");
			    getchar();getchar();
			   break;
		case 6: Quit();
			    break;
		default:printf("你输入了非法字符!按回车键回到主菜单。");
		 
		system("cls");
		menu();
		getchar();
        }
    }
}

     学习笔记:当初学习链表时,对部分代码进行了借鉴.实战经验很重要.需要多多动手.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C语言创建通讯录链表的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 50 #define MAX_PHONE_LEN 20 typedef struct Contact { char name[MAX_NAME_LEN]; char phone[MAX_PHONE_LEN]; struct Contact *next; } Contact; Contact *head = NULL; void addContact() { Contact *newContact = (Contact*) malloc(sizeof(Contact)); printf("Enter name: "); scanf("%s", newContact->name); printf("Enter phone number: "); scanf("%s", newContact->phone); newContact->next = NULL; if (head == NULL) { head = newContact; } else { Contact *current = head; while (current->next != NULL) { current = current->next; } current->next = newContact; } printf("Contact added successfully!\n"); } void displayContacts() { if (head == NULL) { printf("No contacts found.\n"); } else { Contact *current = head; printf("Contacts:\n"); while (current != NULL) { printf("%s: %s\n", current->name, current->phone); current = current->next; } } } void deleteContact() { if (head == NULL) { printf("No contacts found.\n"); } else { char name[MAX_NAME_LEN]; printf("Enter name of contact to delete: "); scanf("%s", name); Contact *current = head; Contact *prev = NULL; while (current != NULL) { if (strcmp(current->name, name) == 0) { if (prev == NULL) { head = current->next; } else { prev->next = current->next; } free(current); printf("Contact deleted successfully!\n"); return; } prev = current; current = current->next; } printf("Contact not found.\n"); } } int main() { int choice; do { printf("Menu:\n"); printf("1. Add contact\n"); printf("2. Display contacts\n"); printf("3. Delete contact\n"); printf("4. Exit\n"); printf("Enter choice: "); scanf("%d", &choice); switch (choice) { case 1: addContact(); break; case 2: displayContacts(); break; case 3: deleteContact(); break; case 4: printf("Exiting...\n"); break; default: printf("Invalid choice.\n"); } } while (choice != 4); return 0; } ``` 该程序使用链表来存储联系人的姓名和电话号码。用户可以选择添加、显示或删除联系人。添加联系人时,程序会提示用户输入姓名和电话号码,并将联系人添加到链表的末尾。显示联系人时,程序会遍历整个链表并输出每个联系人的姓名和电话号码。删除联系人时,程序会提示用户输入要删除的联系人的姓名,并从链表中删除该联系人。如果联系人不存在,则程序会显示“Contact not found.”的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值