过默 发表于 2013-4-27 20:20:50

数据结构小结

#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; //&Ecirc;&yacute;&frac34;&Yacute;&Oacute;ò
struct Node* next; //&Ouml;&cedil;&Otilde;&euml;&Oacute;ò
} 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++)      也没有什么错误,怎么编译不通过?

mt880607 发表于 2013-4-27 20:46:40

我只是路过打酱油的。

过默 发表于 2013-4-27 20:54:07

少个分号 ;   

网络学习 发表于 2013-4-28 00:01:34

路过打酱油的
页: [1]
查看完整版本: 数据结构小结