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

📄 list2.txt

📁 c语言链表
💻 TXT
字号:


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

/*构建结点结构体 */
typedef struct LNode{ 
       int data;
       struct LNode * next;
}LNode, * LinkList;
/*用于创建链表的函数 */
/*反序构建的*/
LinkList CreateList_L(LinkList L, int n)
{ 
       int i;
       LinkList p;
       L = (LinkList)malloc(sizeof(LNode));
       L->next = NULL;
       for(i = n; i > 0; --i)
       { 
               p = (LinkList)malloc(sizeof(LNode));
               scanf("%d",&p->data);
               p->next = L->next;
               L->next = p;
        }
       return L;
}
/* 用于插入结点的函数 */

LinkList ListInsert_L(LinkList L, int i, int newnode)
{ 
       LinkList p = L;
       LinkList s;
       int j = 0;
       while(p&&j<i-1)
       { 
               p = p->next;
               ++j;
        }
       if(!p||j>i-1)
       { 
               printf("位置小于1或大于表长。\n");
               return L;
        }
       s = (LinkList)malloc(sizeof(LNode));
       s->data = newnode;
       s->next = p->next;
       p->next = s;
       return L;

}

/* 用于删除结点的函数 */

LinkList ListDelete_L(LinkList L, int i)
{ 
       LinkList p = L;
       LinkList s;
       int j=0;
       while(p->next&&j<i-1)
       { 
               p = p->next;
               ++j;
        }
       if(!(p->next)||j>i-1)
       { 
               printf("删除位置不合理。\n");
               return L;
        }
       s = p->next;
       p->next = s->next;
       printf("%s%d\n","被删除的结点是:",s->data);
       free(s);
       return L;
}


/*用于遍历链表的函数 */
void ListDisp_L(LinkList L)
{ 
       LinkList p;
       int i=0;
       p = L->next;

       while(p)
       { 
               printf("%d:%d\n", ++i,p->data);
               p = p->next;
        }

}


/* 选择排序算法 网上找来的 我自己写的老报错误 */

LinkList ListSort_L(LinkList L)
{ 
       LinkList h1,p,q,r,s;
       h1=p=(LinkList)malloc(sizeof(LinkList));
       p->next=L;
       while(p->next)
       { 
               q=p->next;
               r=p;
               while(q->next)
               { 
                       if(q->next->data < r->next->data)
                               r=q;
                       q=q->next;
                }
               if(r!=p)
               { 
                       s=r->next;
                       r->next=s->next;
                       s->next=p->next;
                       p->next=s;
                }
               p=p->next;
        }
       L=h1->next;
       free(h1);
       return L;
}

int getoptions()
{ 
       int opt;
       printf("1: 录入链表\n");
       printf("2: 显示链表\n");
       printf("3: 插入结点\n");
       printf("4: 删除结点\n");
       printf("5: 排序链表\n");
       printf("6: 退出\n");
       printf("输入选项并按回车确认:");
       scanf("%d",&opt);
       return opt;
}



int main(int argc, char* argv[])
{ 
       int opt;
       int where;
       int value;
       int count;
       LinkList L;
       while(1)
       { 
               clrscr();
               opt = getoptions();
               if(opt == 1)
               { 
                       clrscr();
                       printf("请输入链表初始结点数:");
                       scanf("%d",&count);
                       printf("请输入各个结点数值,每输入一个按回车确认:\n");
                       L = CreateList_L(L, count);
                       clrscr();
                       ListDisp_L(L);
                       system("PAUSE");
                       continue;
                }
               if(opt == 2)
               { 
                       clrscr();
                       ListDisp_L(L);
                       system("PAUSE");
                       continue;
                }
               if(opt == 3)
               { 
                       clrscr();
                       ListDisp_L(L);
                       printf("请输入插入位置:");
                       scanf("%d", &where);
                       printf("请输入要插入的数值:");
                       scanf("%d", &value);
                       clrscr();
                       L = ListInsert_L(L,where,value);
                       ListDisp_L(L);
                       system("PAUSE");
                       continue;
                }
               if(opt == 4)
               { 
                       clrscr();
                       ListDisp_L(L);
                       printf("请输入要删除的位置:");
                       scanf("%d",&where);
                       clrscr();
                       L = ListDelete_L(L,where);
                       ListDisp_L(L);
                       system("PAUSE");
                       continue;
                }
               if(opt == 5)
               { 
                       clrscr();
                       L = ListSort_L(L);
                       ListDisp_L(L);
                       system("PAUSE");
                       continue;
                }
               if(opt == 6)
               { 
                       return 0;
                }

        }   

}
 

⌨️ 快捷键说明

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