• 这几天写的单链表


      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<stdlib.h>
      4 typedef int/*这里为线性表数据元素类型*/ ElemType;
      5 struct node {//单链表节点类型
      6     ElemType data;
      7     struct node *next;
      8 };
      9 typedef struct node SLink;
     10 //为单链表结点类型struct node定义一个易记忆类型名SLink
     11 
     12 //初始化单链表
     13 void CreatList(SLink *L)/* &表示L是引用参数,*表示L是指针,L是指向LinkList数据的指针*/{
     14     L = (SLink*)malloc(sizeof(SLink));//sizeof()是求一个类型的字节大小的,比如 sizeof(int )就是4.
     15         //创建头结点
     16         L->next = NULL;
     17 }
     18 //销毁单链表
     19 void DestroyList(SLink *L) {
     20     SLink* pre = L, *p = pre->next;
     21     while (p != NULL) {
     22         free(pre);
     23         pre=p;
     24         p = p->next;
     25      }
     26     free(pre);
     27 }
     28 //求单链表长度
     29 int GetLength(SLink *L) {
     30     SLink* pre = L;
     31     SLink* p = pre->next;
     32     int i=1;
     33     while (p!= NULL) {
     34         p = p->next;
     35         i++;
     36     }
     37     return printf("该单链表长度为%d", i);
     38 }
     39 //求单链表中的第i个元素
     40 int GetElem(SLink*& L) {
     41     SLink* pre = L;
     42     SLink* p = pre->next;
     43     int n;
     44     printf("请输入你想查找的位置
    ");
     45     scanf("%d", &n);
     46     if (n <= 0) {
     47         return printf("你所输入的位置有误
    ");
     48     }
     49     for (int i = 1; i < n; i++) {
     50         p = p->next;
     51     }
     52     if (p == NULL)/*NULL常用来表示空指针*/ {
     53         return printf("这个位置没有数字
    ");
     54     }
     55         return printf("查找成功值为%d
    ", p->data);
     56     
     57 }
     58 //按值查找
     59 int Locate(SLink*& L) {
     60     SLink* pre = L;
     61     SLink* p = pre->next;
     62     int m,i=1;
     63     printf("请输入你想查找的值
    ");
     64     scanf("%d", &m);
     65     while (p->data != m&&p!=NULL) {
     66         p = p->next;
     67         i++;
     68     }
     69     if (p == NULL) {
     70         return printf("没有找到该值
    ");
     71     }
     72     return printf("该值的位置在第%d个
    ", i);
     73 }
     74 //在指定位置插入元素
     75 int insElem(SLink*& L){
     76     SLink* pre = L;
     77     SLink* p = pre->next;
     78     int i,m;
     79     SLink *NewNode = (SLink*)malloc(sizeof(SLink));
     80     printf("请输入你想插入第几个位置后面
    ");
     81     scanf("%d", &i);
     82     for (int k = 1; k < i; k++) {
     83         p = p->next;
     84     }
     85     if (p == NULL) {
     86         return printf("插入失败,未找到该结点");
     87     }
     88     printf("请输入你想插入的值
    "); 
     89     scanf("%d", &m);
     90     NewNode->data=m;
     91     //p->next = NewNode;
     92     //NewNode->next = p->next->next;
     93     NewNode->next = p->next;
     94     p->next = NewNode;
     95     return printf("插入成功");
     96 
     97 }
     98 //删除元素
     99 int DleElem(SLink*& L) {
    100     SLink* pre = L;
    101     SLink* p = pre->next;
    102     SLink* q;
    103     int n;
    104     printf("请输入你想删除的数据位置
    ");
    105     scanf("%d", &n);
    106     for (int i = 2; i < n; i++) {
    107         p=p->next;
    108     }
    109     //这是删除p所在的后一个的结点; 
    110     if (p == NULL) {
    111         return printf("你所输入的位置不规范
    ");
    112     }
    113     q = p->next;
    114     p->next=q->next;
    115     free(q) ;
    116 
    117     return printf("删除成功
    ");
    118 }
    119 //输出单链表
    120 int DisElem(SLink*& L) {
    121     SLink* pre = L, * p,*q;
    122     p = pre->next;
    123     q=p->next;
    124     if(p==NULL){
    125         return printf("链表中暂时没有元素
    "); 
    126     } 
    127     while (p!= NULL) {
    128         int i=1;
    129         printf("%d  ",p->data);
    130         p=p->next;
    131     }
    132     printf("
    ");
    133     printf("输出成功
    ");
    134 }
    135 //创建和输入单链表 
    136 int CreateAndInputElemT(SLink*& L) {
    137     L = (SLink*)malloc(sizeof(SLink));
    138     L->next = NULL; 
    139     int n,m; SLink* S,*p=L;
    140     printf("请输入你想输入的长度
    ");
    141     scanf("%d", &n);
    142     for (int i = 0; i < n; i++) {
    143         S = (SLink*)malloc(sizeof(SLink));
    144         printf("请输入第%d个数", i + 1);
    145         printf("
    ");
    146         scanf("%d", &m);
    147         S->data = m;
    148         p->next=S;
    149         p=p->next; 
    150     }
    151     p->next=NULL;
    152 
    153     printf("创建成功
    ");
    154 }
    155 //改变元素 
    156 int  Change(SLink *&L){
    157     SLink *pre=L;
    158     SLink *p=pre->next;
    159     int n,m;
    160     printf("请输入你想改变的数位置
    ");
    161     scanf("%d",&n);
    162     for(int i=1;i<n;i++){
    163         p=p->next;
    164     }
    165     if(p==NULL){
    166         return printf("该位置超出链表范围
    "); 
    167     }
    168     printf("请输入你想改成的数字
    ");
    169     scanf("%d",&m); 
    170     p->data=m;
    171     return printf("恭喜你改成功!
    "); 
    172 }
    173 //求最大值
    174 int GetMax(SLink *&L){
    175     SLink *pre=L,*p;
    176     p=pre->next;
    177     int Max;
    178     Max=p->data;
    179     for(;p!=NULL;){
    180         if(p->data>Max){
    181             Max=p->data;
    182         }
    183         p=p->next;
    184     }
    185     return printf("该链表的最大值为%d
    ",Max);
    186 } 
    187 //将链表里奇数都删掉
    188 int Delji(SLink *&L){
    189     SLink *pre=L,*q;
    190     for(;pre!=NULL;){
    191         q=pre->next;
    192         if(q->data%2!=0){//输入有限制-128至127. 
    193             pre->next=q->next;
    194             free(q);
    195             pre=pre->next;
    196         }
    197     }
    198     return printf("删除成功
    "); 
    199 } 
    200 //主函数
    201 int main() {
    202     SLink *L;
    203 while(true){
    204   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
    205   printf("||  1:创建并输入单链表                      ||
    ");
    206   printf("||  2:从指定位置删除一个数                  ||
    ");
    207   printf("||  3:查询数的位置                          ||
    ");
    208   printf("||  4:将元素插入指定位置                    ||
    ");
    209   printf("||  5:改变某位置元素                        ||
    ");
    210   printf("||  6:打印顺序表                            ||
    ");
    211   printf("||  7: 求该链表的最大值                      ||
    ");
    212   printf("||  8: 删除链表中的奇数                      ||
    ");
    213   printf("||  9: 销毁链表                              ||
    ");
    214   printf("||  (输入-1退出系统)                         ||
    ");
    215   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
    216         int n;
    217         printf("请输入操作序号:
    ");
    218         scanf("%d",&n);
    219         switch(n){
    220             case 1 :
    221                 CreateAndInputElemT(*& L);
    222                 break;
    223             case 2 :
    224                 DleElem(*& L);
    225                 break;
    226             case 3 :
    227                 Locate(*& L);
    228                 break;     
    229             case 4 :
    230                 insElem(*& L);
    231                 break;
    232             case 5 :
    233                 Change(*& L); 
    234                 break;    
    235             case 6 :
    236                 DisElem(*& L);
    237                 break;
    238             case 7 :
    239                 GetMax(*& L);
    240                 break;
    241             case 8 :
    242                 Delji(*&L);
    243                 break;
    244             case 9 :
    245                 DestroyList(L);
    246                 break;     
    247             case -1:
    248                 return 0;            
    249 
    250         }
    251 
    252 }
    253 
    254 }
  • 相关阅读:
    读取XML字符串到临时表
    Golang学习笔记
    Golang环境配置Centos
    IntelliJ Idea 常用快捷键列表
    Elasticsearch的Groovy Script自定义评分检索
    MSSQL读取xml字符串到临时表
    通过反射给对象属性动态赋值总结(含可空属性)
    。。。。。
    指定位置输出函数
    DBhelper
  • 原文地址:https://www.cnblogs.com/longlonglonglong/p/10939885.html
Copyright © 2020-2023  润新知