首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

线性链表(面临过程)-2011.11.13

2012-12-24 
线性链表(面向过程)--2011.11.13?#includestdio.h#includestring#includestdlib.h#define MAX 10typ

线性链表(面向过程)--2011.11.13

?

#include<stdio.h>#include<string>#include<stdlib.h>#define MAX 10typedef struct Node{char cData[MAX];struct Node *pNext;}*Linklist;int nChoice();void vInitLink(Linklist *H1);//&Hvoid vCreatLinkHead(Linklist H1,char cLine[]);void vChanceShow(Linklist H1);void vShow(Linklist H1);void vInLink(Linklist H1,int nPos,char cIn[]);void vDelLink(Linklist H1,int nPos);int main(){int nInPos;int nDelPos;int nOption;Linklist H;char cInData[MAX];char cLetters[MAX];//链表节点个数可以不确定nOption = 1;while((nOption>0) && (nOption<7)){nOption = nChoice();switch(nOption){case 1:vInitLink(&H);printf("请输入字符串(以-1结束):\n");while((scanf("%s",&cLetters) != EOF) && (strcmp(cLetters,"-1") != 0))//字符串不能用相等来表示={vCreatLinkHead(H,cLetters);//&H这里H已经是指针了}vChanceShow(H);break;case 2:while(printf("请输入要插入的位子(以-1结束):\n") && (1 == scanf("%d",&nInPos)) && (nInPos != -1)){printf("请输入要插入的值:\n");scanf("%s",&cInData);vInLink(H,nInPos,cInData);vChanceShow(H);}break;case 3:while((printf("请输入要删除的位子(以-1结束):\n")) && (1 == scanf("%d",&nDelPos)) && (nDelPos != -1)){vDelLink(H,nDelPos);vChanceShow(H);}break;case 5:vShow(H);break;case 6:exit(0);break;default:break;}}return 0;}//选择函数int nChoice(){int nOption;printf("输入选项:\n1、创建数据\n2、插入数据\n3、删除数据\n4、查找数据\n5、输出数据\n6、退出\n");scanf("%d",&nOption);return nOption;}//初始化链表void vInitLink(Linklist *H1){*H1 = (Linklist)malloc(sizeof(Node));(*H1)->pNext = NULL;}//创建链表(头插法)void vCreatLinkHead(Linklist H1,char cLine[]){Node *pX;pX = (Node*)malloc(sizeof(Node));strcpy(pX->cData , cLine);pX->pNext = H1->pNext;//i=0时,相当于pX->pNext = NULL;H1->pNext = pX;//free(pX);删除的时候才需要}//选择是否要显示数据(链表内容)void vChanceShow(Linklist H1){bool bIsShow;printf("\n如果要看存储的内容,请输入1,否则输入0:\n");scanf("%d",&bIsShow);printf("\n");if(1 == bIsShow){vShow(H1);}}//显示链表void vShow(Linklist H1){Node *pX;pX = (Node*)malloc(sizeof(Node));pX = H1;while(pX->pNext != NULL){pX = pX->pNext;printf("%s\n",pX->cData);}printf("\n");}//插入节点(已知插入的位置和值)void vInLink(Linklist H1,int nPos,char cIn[]){int i;Node *pX,*pPre;i = 0;pPre = H1;pX = (Node*)malloc(sizeof(Linklist));while((pPre->pNext != NULL) && (i < nPos-1)){pPre = pPre->pNext;i++;}if(i != nPos-1){printf("插入位置有误!");}else{strcpy(pX->cData,cIn);pX->pNext = pPre->pNext;pPre->pNext = pX;}}//删除节点(已知删除的位置)void vDelLink(Linklist H1,int nPos){int i;Node *pX,*pPre;i = 0;pPre = H1;pX = (Node*)malloc(sizeof(Linklist));while((pPre->pNext !=NULL) && (i < nPos-1)){pPre = pPre->pNext;i++;}if((i != nPos-1) || (pPre->pNext == NULL)){printf("删除位置有误\n\n");}else{pX = pPre->pNext;pPre->pNext = pPre->pNext->pNext;free(pX);}}

热点排行