|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define ERROR 0
- #define TRUE 1
- #define OK 1
- #define FALSE 0
- typedef int ElemType;
- typedef int Status;
- typedef struct Node
- {
- ElemType data; //Êý¾ÝÓò
- struct Node* next; //Ö¸ÕëÓò
- } Node ;
- typedef struct Node* LinkList; /*定义LinkList*/
- Status visit(ElemType c)
- {
- printf("%d", c);
- return OK;
- }
- /*初始化顺序线性表*/
- Status InitList(LinkList* L)
- {
- *L = (LinkList)malloc(sizeof(Node)); /*产生头结点,并使L指向此头结点*/
- if (!(*L)) /*存储分配失败*/
- {
- return ERROR;
- }
- (*L)->next = NULL; /*指针域为空*/
- return OK;
- }
- /*初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数*/
- int ListLength(LinkList L)
- {
- int i = 0;
- LinkList p = L->next; /* p指向第一个结点*/
- while (p)
- {
- i++;
- p = p->next;
- }
- return i;
- }
- /*初始条件:顺序纯属表L已存在*/
- /*操作结果:依次对L的每个数据元素输出*/
- Status ListTraverse(LinkList L)
- {
- LinkList p = L->next;
- while (p)
- {
- visit(p->data);
- p = p->next;
- }
- printf("\n");
- return OK;
- }
- /*随机产生n个元素的值,建立带头结点的单链表线性表L (尾插法)*/
- void CreateListTail(LinkList* L, int n)
- {
- LinkList p, r;
- int i;
- srand(time(0)); /*初始化随机数种子*/
- *L = (LinkList)malloc(sizeof(Node)); /*L为整个线性表*/
- r = *L /*r为指向尾部结点*/
- for(i=0; i<n; i++)
- {
- p = (Node*)malloc(sizeof(Node)); /*生成新结点*/
- p->data = rand() % 100 + 1; /*随机生成100以内的数字*/
- r->next = p; /*将表尾终端点的指针指向新结点*/
- r = p; /*将当前的新结点定义为表尾终端结点*/
- }
- r->next = NULL; /*表示当前链表结点*/
- //创建有环链表
- //r->next=p;
- }
- Status GetMidNode(LinkList L, ElemType* e)
- {
- LinkList search, mid;
- mid = search = L;
- while (search->next != NULL)
- {
- //search移动的速度是 mid的2倍
- if (search->next->next != NULL)
- {
- search = search->next->next;
- mid = mid->next;
- }
- else
- {
- search = search->next;
- }
- }
- *e = mid->data;
- return OK;
- }
- /*
- int CreateListHead(LinkList *L, int n)
- {
- LinkList p,r;
- int i=1;
- srand(time(0)); //初始化随机种子
- (*L) = (LinkList)malloc(sizeof(struct Node)); //先建立一个带头结点的单链表
- if((*L) == NULL)
- {
- fprintf(stderr, "malloc() error.\n");
- return ERROR;
- }
- (*L)->next = NULL;
- r=*L; //尾部结点
- for(i=0; i<n; i++)
- {
- p=(Node *) malloc(sizeof(Node));
- p->data=rand()%100+1;
- r->next =p;
- r=p;
- }
- r->next = NULL; //表示当前链表结束
- return OK;
- }
- int ClearList(LinkList *L)
- {
- LinkList p,q;
- p=(*L)->next;
- while(p)
- {
- q=p->next;
- free(p);
- p=q;
- }
- (*L)->next=NULL;
- return OK;
- }
- int printList(LinkList L)
- {
- LinkList p;
- p = L->next;
- if(p == NULL)
- {
- printf("链表为空.\n");
- return ERROR;
- }
- while(p)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("\n");
- return OK;
- }
- */
- int main()
- {
- LinkList L;
- Status i;
- char opp;
- ElemType e;
- int find;
- int tmp;
- i = InitList(&L);
- printf("初始化L后: ListLength(L)=%d\n", ListLength(L));
- while (opp != '0')
- {
- scanf("%c", &opp);
- switch (opp)
- {
- case '1':
- ListTraverse(L);
- printf("\n");
- break;
- case '2':
- CreateListTail(&L, 20);
- printf("整体创建L的元素(尾插法):\n");
- ListTraverse(L);
- printf("\n");
- break;
- case '3':
- //clearList(pHead); //清空链表
- printf("ListLength(L)=%d \n", ListLength(L));
- printf("\n");
- break;
- case '4':
- //GetNthNodeFromBack(L,find,&e);
- GetMidNode(L, &e);
- printf("链表中间结点的值为:%d\n", e);
- //ListTraverse(L);
- printf("\n");
- break;
- case '0':
- exit(0);
- }
- }
- /* printf("Hello world!\n");
- CreateListHead(&L,100);
- printList(L);
- */
- return 0;
- }
复制代码 for(i=0; i<n; i++)
{
p = (Node*)malloc(sizeof(Node)); /*生成新结点*/
p->data = rand() % 100 + 1; /*随机生成100以内的数字*/
r->next = p; /*将表尾终端点的指针指向新结点*/
r = p; /*将当前的新结点定义为表尾终端结点*/
}
for(i=0;i<n;i++) 也没有什么错误,怎么编译不通过?
|
|