链表练习代码

  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 

 

posted @ 2013-10-15 09:32  herizai007  阅读(395)  评论(0编辑  收藏  举报