zoukankan      html  css  js  c++  java
  • 链表练习代码

      1 //------------------------
      2 #include<iostream>
      3 using namespace std;
      4 int main()
      5 {
      6 int n,m,i,j;
      7 cin>>m>>n;
      8 int **a;
      9 a=new int*[m];
     10 for(i=0;i<n;i++)
     11 a[i]=new int[m];
     12 cout<<"请输入数:";
     13 cin>>a[2][3];
     14 cout<<a[2][3]<<'
    ';
     15 delete []a;
     16 return 0;
     17 }
     18 //------------------------------
     19 // practice32.cpp : Defines the entry point for the console application.
     20 //
     21 
     22 #include<malloc.h> // malloc()等
     23 #include<stdlib.h> // atoi()
     24 #include <stdio.h>
     25 
     26 typedef int ElemType;
     27 
     28 // 线性表的单链表存储结构
     29 struct LNode
     30 {
     31  ElemType data;
     32  LNode *next;
     33 };
     34 typedef LNode *LinkList; // 另一种定义LinkList的方法
     35 
     36 // 操作结果:构造一个空的线性表L
     37 int  InitList(LinkList &L)
     38 {
     39  L=(LinkList)malloc(sizeof(LNode)); // 产生头结点,并使L指向此头结点
     40  if(!L) // 存储分配失败
     41   return 0;
     42  L->next=NULL; // 指针域为空
     43  return 1;
     44 }
     45 // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
     46 void CreateList2(LinkList &L,int n)
     47 {
     48  int i;
     49  LinkList p,q;
     50  L=(LinkList)malloc(sizeof(LNode)); // 生成头结点
     51  L->next=NULL;
     52  q=L;
     53  printf("请输入%d个数据
    ",n);
     54  for(i=1;i<=n;i++)
     55  {
     56   p=(LinkList)malloc(sizeof(LNode));
     57   scanf("%d",&p->data);
     58   q->next=p;
     59   q=q->next;
     60  }
     61  p->next=NULL;
     62 }
     63 
     64 int ListTraverse(LinkList L)
     65 {
     66  LinkList p;
     67  p = L->next;
     68  while(p)
     69  {
     70   printf("%d ",p->data);
     71   p = p->next;
     72  }
     73  printf("
    ");
     74  return 1;
     75 }
     76 
     77 int main(int argc, char* argv[])
     78 {
     79    int n=5;
     80    LinkList La;
     81 
     82    CreateList2(La,n); // 正位序输入n个元素的值
     83    printf("La="); // 输出链表La的内容
     84    ListTraverse(La);
     85 
     86    return 0;
     87 }
     88 //----------------------------
     89 #include "stdio.h"
     90 #include "stdlib.h"
     91 typedef struct LNode
     92 {int data;
     93 int num;
     94 struct LNode *next;
     95 }LNode,*linklist;
     96 linklist creat(int n)
     97 {/*构造一个长度为n的无头节点的循环链表,并返回指向最后一个节点的指针*/
     98  linklist head,s;
     99  int i;
    100  s=head=(linklist)malloc(sizeof(LNode));
    101 
    102  for(i=1;i<n;i++)
    103  {s->data=i;
    104   printf("num%d: ",i);
    105   scanf("%d",&(s->num));/*输入第i个人的密码*/
    106   while(s->num<=0)
    107   {/*如果输入的s->num小于等于0,要求重新输入*/
    108   printf("请重新输入
    num%d: ",i);
    109   scanf("%d",&s->num);
    110   }
    111   s->next=(linklist)malloc(sizeof(LNode));
    112   s=s->next;
    113  }
    114 s->data=i;
    115 printf("num%d: ",i);
    116 scanf("%d",&(s->num));
    117 s->next=head;
    118 return(s);
    119 }
    120 
    121 linklist find(int m,linklist s) //找到当前元素后面第m个元素
    122 {
    123  int i;
    124  for(i=0;i<m-1;i++)
    125      s=s->next;
    126  return(s);
    127 }
    128 
    129 void print(int &m,int &n,linklist &s)
    130 {
    131  linklist p;
    132  s=find(m,s);
    133  printf("%d   ",s->next->data);/*输出找到的元素*/
    134  m=s->next->num;/*将此元素从链表中删除,并释放此节点*/
    135  p=s->next;
    136  s->next=s->next->next;
    137  free(p);
    138  --n;
    139 }
    140 
    141 
    142 void main()
    143 {/*解决约舍夫问题的主函数*/
    144  int n,m;
    145  printf("type in n :");
    146  scanf("%d",&n);/*输入n*/
    147  while(n<=0)
    148  {/*如果输入的n小于等于0,要求重新输入*/
    149   printf("please type n in again 
    type in n :");
    150   scanf("%d",&n);
    151  }
    152  printf("type in m :");
    153  scanf("%d",&m);/*输入m*/
    154  while(m<0)
    155  {/*如果输入的m小于0,要求重新输入*/
    156   printf("please type m in again 
    type in m :");
    157   scanf("%d",&m);
    158  }
    159  linklist s;
    160  s=creat(n);/*创建无头节点的循环链表,返回指向最后一个元素的指针*/
    161  printf("the sequence is ");
    162  print(m,n,s);//输出第一个出列的元素
    163  while(n)
    164  {
    165      print(m,n,s);//输出剩余出列的元素
    166  }
    167  printf("
    ");
    168 }
    169 //-----------------------------------------
    170 void initlist(sqlist &sq)
    171 {
    172     sq.len = 0;
    173 }
    174 
    175 int getlen(sqlist sq)
    176 {
    177     return sq.len;
    178 }
    179 
    180 int getelem(sqlist sq, int i)
    181 {
    182     return sq.data[i - 1];
    183 }
    184 
    185 int locate(sqlist sq, ElemType x)
    186 {
    187     int i = 0;
    188     while (sq.data[i] != x)
    189         i++;
    190     if (i > sq.len)
    191         return 0;
    192     else
    193         return 1+i;
    194 }
    195 int inselem(sqlist&sq, ElemType x, int i)//删除i这个节点
    196 {
    197     int j;
    198     if (i<1 || i>sq.len + 1)//不符
    199         return 0;
    200     for (j = sq.len; j > i; j--)
    201         sq.data[j] = sq.data[j - 1];//data[i-1]代表i处元素的值,data[sq.len]代表最大处的值
    202     sq.data[i - 1] = x;
    203     sq.len++;
    204     return 1;
    205 }
    206 
    207 int delelem(sqlist&sq, int i)//前移1位
    208 {
    209     int j;
    210     if (i<1 || i>sq.len)
    211         return 0;
    212     for (j = i; j < sq.len; j++)
    213         sq.data[j - 1] = sq.data[j];
    214     sq.len--;
    215     return 1;
    216 }
    217 
    218 void displist(sqlist sq)
    219 {
    220     int i;
    221     for (i = 1; i < sq.len; i++)
    222         cout << sq.data[i - 1] << " ";
    223     cout << endl;
    224 }
    225 //-------------------------------
    226 typedef struct node
    227 {
    228     ElemType data;
    229     struct node* next;
    230 }slink;
    231 
    232 typedef struct node
    233 {
    234     ElemType data;
    235     struct node *prior, *next;
    236 };
    237 
    238 void initlist(slink *&sq)
    239 {
    240     sq = (slink*) malloc(sizeof(slink));
    241     sq->next = NULL;
    242 }
    243 
    244 int getlen(slink*sq)
    245 {
    246     int i = 0;
    247     slink*p = sp->next;//sq的下一位,p初始时指向第一个结点,sq为头结点
    248     while (p != NULL)
    249     {
    250         i++;
    251         p = p->next;
    252     }
    253     return i;
    254 }
    255 
    256 slink*getelem(slink*sq, int i)
    257 {
    258     int j = 1;
    259     slink*q = sq->next;//sq的下一位,p初始时指向第一个结点,sq为头结点
    260     if (i<1 || i>getlen(sq))
    261         return NULL;
    262     while (j < i)
    263     {
    264         p = p->next;
    265         j++;
    266     }
    267     return p;
    268 }
    269 
    270 slink*locate(slink*sq, ElemType x)
    271 {
    272     slink*p = sq->next;
    273     while (p != NULL && p->data != x)
    274         p = p->next;
    275     return p;
    276 }
    277 
    278 int 
  • 相关阅读:
    构造函数作为友元函数的参数
    引用调用
    分块查找
    折半查找
    c++中map按key和value排序
    STL之map学习实例
    STL之stack
    STL之map
    STL之string
    STL之template类模板
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3369613.html
Copyright © 2011-2022 走看看