#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;} LNode, *LinkList;void InitList(LinkList &L) //初始化线性表{ L = (LinkList)malloc(sizeof(LNode)); //创建头结点 L->next = NULL; L->data = -1;}void Build(LinkList &L)//建立一个带头结点的单链表{ int n; LinkList p, q; p = L; printf("请输入数据元素个数n:\n"); scanf("%d", &n); printf("请输入%d个数据元素:\n", n); while(n--) { q = (LinkList)malloc(sizeof(LNode)); scanf("%d", &q->data); q->next = NULL; p->next = q; p = q; }}int n = 0;//计数君nvoid count(LinkList L, int x){ Node *p;//定义一个指针节点p p = L;//将p初值指向链表头节点 printf("\n请输入要找的元素值x:"); scanf("%d", &x);//输入需要查找的数 while(p!= NULL)//用while循环遍历单链表L { if(p->data == x) n++;//正在遍历的数用if语句判断是否等于x,若等于,计数君n+1 p = p->next;//无论if语句中判断真或假,判断完就可以执行下一个数 }//(这里的p=p->next不可以在大括号外,否则遍历不能完全执行) printf("表中含有%d个%d\n", n, x);//while循环执行完毕可以输出}int s=0,j=0;//定义总结点数为s。j记忆第几个节点void find(LinkList L,int m){ Node *p; p=L; printf("\n你要查找倒数第几个结点的值?"); scanf("%d",&m); while(p!=NULL) { p=p->next; s++; } while((p->next!=NULL)&&(j<s-m+1)) { p=p->next; j++; } printf("倒数第%d个元素的值为%d\n",m,p); }int main(){ LinkList L; InitList(L); Build(L); count(L,n); find(L,p); return 0;}
目前暂无任何回答
- 0 回答
- 0 关注
- 925 浏览
添加回答
举报
0/150
提交
取消