Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444376
  • 博文数量: 78
  • 博客积分: 2307
  • 博客等级: 上尉
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-04 00:31
个人简介

IT老鸟,信息安全硕士。

文章分类
文章存档

2017年(2)

2012年(21)

2011年(55)

分类: C/C++

2011-06-13 10:07:42

VS2005下面测试通过.最基本的

单链表有空指针的可能.


  1. Code:
  2. #include "stdafx.h"
  3. #include<stdlib.h>
  4. #include "stdio.h"
  5. #include <iostream>
  6. using namespace std;
  7. typedef int Type;
  8. typedef struct LNode{
  9. Type data;//数据域
  10. struct LNode *next;//指针域
  11. }LNode,*LinkList;
  12. LinkList Head;//头结点
  13.   
  14. //创建单链表 头插法,
  15. //返回链表头指针
  16. LinkList CreatLinkList1(){
  17. LinkList L=new LNode;
  18. L->next=0;
  19. LNode *s;
  20. Type value;//数据类型
  21. cin>>value;
  22. while (value!=-1)//-1是结束标志
  23.     {
  24.     s=new LNode;
  25.     s->data=value;
  26.     s->next=L->next;
  27.     L->next=s;
  28.     cin>>value;
  29.     }
  30. return L;
  31. }
  32.   
  33. //创建单链表尾插法
  34. //返回链表头指针
  35. LinkList CreatLinkList2()
  36. {
  37. LinkList L=new LNode;
  38. L->next=0;//空表
  39. LNode *Node,*rear=L;
  40. Type value;//数据类型
  41. cin>>value;
  42. while(value!=-1)//-1是结束标志
  43.     {
  44.     Node=new LNode;//??这里是否会失败?空指针?
  45.     if(0==Node) break;//??
  46.     Node->data=value;
  47.     rear->next=Node;
  48.     rear=Node;//r指向新的尾结点
  49.     cin>>value;
  50.     }
  51. rear->next=0;
  52. return L;
  53. }
  54.   
  55.   
  56. //求表长 表默认带头结点而且不包含头结点
  57. int LengthLinkList(LinkList L)
  58. {
  59. LNode *p=L;//p指向头结点
  60. int count=0;
  61. while(p->next)
  62.     {
  63.         p=p->next;
  64.         count++;
  65.     }
  66. return count;
  67. }
  68.   
  69. //查找
  70. //按序号查找,返回指针值
  71. LNode * getLinkList(LinkList L,int i){
  72. LNode *p=L;
  73. int j=0;
  74. while(p->next!=0&&j<i)
  75.     {p=p->next;j++;}
  76.     if(j==i)return p;
  77.     else return 0;//
  78. }
  79. //按值查找,返回第一个符合的值
  80. LNode *LocateLink(LinkList L,Type x){
  81.     LNode *p=L->next;
  82.     while(p!=0&&p->data!=x)
  83.         p=p->next;
  84.     return p;
  85. }
  86.   
  87. //插入操作在第i个值之之后插入
  88. bool insertLinkList(LinkList L,int i,Type value)
  89. {
  90.     bool returnvalue=false;
  91.     LinkList p=getLinkList(L,i);
  92.     LNode *Node=new LNode;//这里是否会失败??
  93.     if(0!=p)
  94.     {
  95.         Node->next=p->next ;
  96.         p->next=Node;
  97.         Node->data=value;
  98.         returnvalue=true;
  99.     }
  100.     return returnvalue;
  101. }
  102.   
  103. //打印链表所有值并打印长度
  104. void printLink(LinkList L)
  105. {
  106.     int count=0;
  107.     if(L->next) //从表头走到第一个元素
  108.     {
  109.         L=L->next;
  110.         cout<<L->data<<endl;
  111.     }
  112.     L=L->next;//走到第二个元素
  113.     while(L!=0)
  114.     {
  115.         //printf("%d",L->data);//假设是int值
  116.         cout<<L->data<<endl;
  117.         count++;
  118.         L=L->next;
  119.     }
  120.     printf("表长度为%d",count);
  121. }
  122.   
  123. int main(){
  124.     LinkList M;
  125.     //声明
  126.     LinkList CreatLinkList1();
  127.     LinkList CreatLinkList2();
  128.     int LengthLinkList(LinkList L);
  129.     LNode * getLinkList(LinkList L,int i);
  130.     bool insertLinkList(LinkList L,int i,Type value);
  131.     void printLink(LinkList L);
  132.     //
  133.     //CreatLinkList1();//测试头插法
  134.     M=CreatLinkList2();//测试尾插法
  135.     //printf("长度为%d",LengthLinkList(M));测试长度代码
  136.     //if(0!=getLinkList(M,3)) printf("找到");//按序号查找
  137.     //if(LocateLink(M,3)) printf("找到");//测试按值查找
  138.     //insertLinkList(M,2,8);
  139.     cout<<"OK"<<endl;
  140.     printLink(M);
  141.     system("PAUSE");
  142.     return 0;
  143. }
  144. /////
  145. 顺序表的动态增长
  146. Code:
  147. #include "stdafx.h"
  148. #include<stdlib.h>
  149. #define initSize 100//表的初始定义
  150. #define ListIncrement 10
  151. typedef int ElemType;
  152. typedef struct{
  153. ElemType *elem;//数据元素
  154. int length;//使用长度
  155. int listsize;//总长度
  156. }SqList;
  157. bool InitSqList(SqList &L){
  158.     bool trueorfalse=false;
  159.     L.elem=new ElemType[initSize];
  160.     if(!L.elem ) {}
  161.     else {
  162.     L.listsize=initSize;
  163.     L.length=0;
  164.     trueorfalse=true;
  165.     }
  166.     return trueorfalse;
  167. }
  168. bool insertSqList(SqList &L,int i ,int value){
  169.     bool trueorfalse=false;
  170.     if(i<0||i>L.length){}
  171.     else{
  172.     int j;
  173.     for( j=L.length;j>i;j--)
  174.          L.elem[j]=L.elem[j-1];
  175.   
  176.     L.elem[j]=value;
  177.     trueorfalse=true;
  178.     }
  179.     return trueorfalse ;
  180. }
  181. bool deleteSqList(SqList &L,int i){
  182.     bool trueorfalse=false;
  183.     if(i<0||i>L.length) {}
  184.     else{
  185.     int j=L.length;
  186.     for(i;i<j;i++)
  187.         L.elem[i]=L.elem[i+1];
  188.   
  189.     L.length--;
  190.     trueorfalse=true;
  191.     }
  192.     return trueorfalse;
  193. }
  194. int locateSqList(SqList L,int i)
  195. {
  196.     int trueorfalse=-1;
  197.     if(i<0||i>L.length) {}
  198.     else{
  199.     trueorfalse=L.elem[i];
  200.     }
  201.     return trueorfalse;
  202. }
  203. int main()
  204. {
  205.     SqList M;
  206.     //声明部分
  207.     bool InitSqList(SqList &L);
  208.     bool insertSqList(SqList &L,int i ,int value);
  209.     bool deleteSqList(SqList &L,int i);
  210.     //声明结束
  211.     if(InitSqList(M) ) printf("InitTrue/n");
  212.     if(insertSqList(M,0,1)) printf("inserttrue/n");
  213.     if(deleteSqList(M,0))printf("deletetrue/n");
  214.   
  215.     system("PAUSE");
  216.     return 0;
  217. }
  218. ////

阅读(2432) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

2011-06-13 11:13:22

表示路过学习了 [url=http://fz.bmycw.com]福州英才网[url]