鱼C论坛

 找回密码
 立即注册
查看: 2334|回复: 1

[技术交流] 今天写了个链表,供c语言初学者学习交流,大神勿喷,嘿嘿

[复制链接]
发表于 2013-12-1 21:35:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int date;
        struct node *next;
}node;

node *creat_list(int n);
int empty_list(node *head);
int treval_list(node *head);
int delete_list(node *head,int i,int n);
int add_list(node *head,int i,int k,int n);

int main()
{
    node *phead = NULL;
        int n,j;
    
        printf("1:创建链表\n");
        printf("2:遍历链表\n");
        printf("3:删除节点\n");
        printf("4:插入节点\n");
        printf("5:退出程序\n");
    printf("请输入您想操作的编号:");

        while(1)
        {
           scanf("%d",&j);
           switch(j)
           {
              case 1:{
                                         printf("请输入您想创建的有效节点的个数:");
                                         scanf("%d",&n);
                                         phead = creat_list(n);
                                         break;              
                                 }
                  case 2:{
                                 if(empty_list(phead))
                                         {
                                             printf("链表为空,遍历失败,请选择您的下一步操作序号:\n");
                                                 break;
                                         }
                                         else
                                         {
                                             treval_list(phead);
                                                 break;
                                         }
                                
                                 } 
                  case 3:{   
                                 int i;
                                         if(empty_list(phead))
                                         {
                                             printf("链表为空,删除节点失败,请选择您的下一步操作序号:\n");
                                                 break;
                                         }
                                         else
                                         {
                                             printf("您想删除第几个节点:");
                                             scanf("%d",&i);
                                         if(!delete_list(phead,i,n))
                                                 {
                                                      printf("删除节点失败,请选择您的下一步操作序号:\n");
                                                 }
                                                 break;
                                         }
                                         
                                 }
                  case 4:{
                                     if(empty_list(phead))
                                         {
                                             printf("链表为空,插入节点失败,请选择您的下一步操作序号:\n");
                                                 break;
                                         }
                                         else
                                         {
                                            int i,k;
                                                printf("请输入您想插入元素的位置:");
                                                scanf("%d",&i);
                                                printf("请输入您想插入的元素的值:");
                        scanf("%d",&k);
                                                if(!add_list(phead,i,k,n))
                                                {
                                                    printf("插入节点失败,请选择您的下一步操作序号:\n");
                                                }
                                                break;
                                         }
                                 }
                  case 5:{
                                     exit(-1);
                                 }
           }
           printf("请输入您的下一步操作:");   
        }
        return 0;
}

node *creat_list(int n)
{
   int i,k;
   node *head = (node *)malloc(sizeof(node));
   node *phead = head;
   head->next = NULL;

   for(i=1;i<=n;i++)
   {  
      head->next = (node *)malloc(sizeof(node));

          if(!head)
          {
                printf("创建链表失败,请关闭程序,重新打开");
                getchar();
            exit(-1);
          }
      scanf("%d",&k);
          head->next->date = k;
          head->next->next = NULL;
      head = head->next;      
   }
   return(phead);
}

int empty_list(node *head)
{
        if(head == NULL)
        {
                return 1;
        }
        else
        {
            return 0;
        }
}

int treval_list(node *head)
{   
        int i;

    for(i=1;head->next!=NULL;i++)
        {
            printf("%d\t",head->next->date);
            printf("\n");
                head = head->next;
        }
        return 1;

}

int delete_list(node *head,int i,int n)
{   
    if(i<0||i>n)
        {
          printf("输入节点位置有误\n");
          return 0;
        }
        else
        {
          node *p = NULL;
          int j;

          for(j=1;j<i;j++)
          {
              head = head->next;
          }
      printf("您删除的节点为:%d",head->next->date);
      p = head->next;
      head->next = head->next->next;
      free(p);
      p = NULL;
      printf("\n");
          return 1;
        }
}

int add_list(node *head,int i,int k,int n)
{
    if(i<0||i>n)
        {
          printf("输入节点位置有误\n");
          return 0;
        }
        else
        {
          node *p = NULL;
          int j;
          
          for(j=1;j<i;j++)
          {
              head = head->next;
          }
          p = head;
          head = head->next;
          p->next = (node *)malloc(sizeof(node));
          p->next->next = head;
          p->next->date = k;
          return 1;
        }
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-1 21:36:05 | 显示全部楼层
自己沙发,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表