链表练习代码
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]<<'\n'; 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",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("\n"); 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("请重新输入\nnum%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 \ntype 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 \ntype 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("\n"); 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