| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 422 人关注过本帖, 1 人收藏
标题:新手谁能教一下我数据链表的创建与运用啊!
只看楼主 加入收藏
枫叶home
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2013-10-15
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:2 
新手谁能教一下我数据链表的创建与运用啊!
哪位大神能教小弟一下C语言链表的概念与创建呢 ,万分感谢!
搜索更多相关主题的帖子: C语言 
2013-10-16 20:56
todayzjs
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:121
注 册:2013-7-1
收藏
得分:10 
程序代码:
说道数据结构中的链表,真的不是一时半会儿能说完的,这是一个相对标准有关链表的程序,简单的写了,创建,插入元素,求链表长度,和输出者几个函数。
链表可以说是数据结构中最基础,同样也是相当重要的,建议lz多花点时间去研究一下,仔细去斟酌。

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;

typedef struct Node
{
  ElemType data;
  struct Node *next;
}Node;
typedef struct Node *LinkList;

/* 初始化顺序线性表 */
Status InitList(LinkList *L)
{
  *L = (LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
  if(!(*L)) /* 存储分配失败 */
    return ERROR;
  (*L)->next = NULL; /* 指针域为空 */

  return OK;
}

/*长度*/
int ListLength(LinkList L)
{
  int i = 0;
  LinkList p = L->next; /* p指向第一个结点 */
  while(p)                    

    {
      i++;
      p = p -> next;
    }
  return i;
}

/*插入元素*/
Status ListInsert(LinkList *L,int i,ElemType e)
{
  int j;
  LinkList p, s;
  p = *L;
  j = 1;
  while (p && j < i)     /* 寻找第i个结点 */
    {
      p = p->next;
      ++j;
    }
  if (!p || j > i)
    return ERROR;   /* 第i个元素不存在 */
  s = (LinkList)malloc(sizeof(Node));  /*  生成新结点(C语言标准函数) */
  s->data = e;
  s->next = p->next;      /* 将p的后继结点赋值给s的后继  */
  p->next = s;          /* 将s赋值给p的后继 */
  return OK;
}

/* 依次对L的每个数据元素输出 */
Status ListTraverse(LinkList L)
{
    LinkList p = L->next;
    while(p)
    {
        visit(p->data);
        p = p->next;
    }
    printf("\n");
    return OK;
}

Status visit(ElemType c)
{
    printf("%d ",c);
    return OK;
}

int main(void)
{
  LinkList L;
  int i;
  int len = 0;

  i = InitList(&L);
  scanf("%d", &i);
  while (i != -1)
    {
      i = ListInsert(&L, 1, i);
      scanf("%d", &i);
    }
  printf("在L的表头一次输入的数据是:L.data = ");
  ListTraverse(L);

  len = ListLength(L);
  printf("该链表的长度:%d\n", len);

  return 0;
}
2013-10-17 08:41
天空编程
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:123
注 册:2013-7-5
收藏
得分:10 
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"
struct Node
{
    char name[10];
    int score;
    struct Node *next;
};
typedef struct Node ListNode;
ListNode *CreateList(int n);
void InsertList(ListNode *h,int i,char name[],int score,int n);
void DeleteList(ListNode *h,int i,int n);
void printfList(ListNode *h);
ListNode *CreateList(int n)//创建一个链表
{
    ListNode *head;
    ListNode *p,*pre;
    int i;
    head=(ListNode *)malloc(sizeof(ListNode));
    head->next=NULL;
    pre=head;
    for(i=1;i<=n;i++)
    {
        printf("intput name of the %d student:",i);
        p=(ListNode *)malloc(sizeof(ListNode));
        scanf("%s",p->name);
        printf("intput score of the %d student:",i);
        scanf("%d",&p->score);
        pre->next=p;
        pre=p;
    }
    p->next=NULL;
    return head;

}
void printfList(ListNode *h)//输出链表的函数
{
    ListNode *p;
    p=h->next;
    while(p)
    {
        printf("%s,%d",p->name,p->score);
        p=p->next;
        printf("\n");
    }
}
void main()
{
    ListNode *h;
    int i=1,n,score;
    char name[10];
    while(i)
    {
        printf("1 建立新的链表\n");
        printf("2 添加元素\n");
        printf("3 删除元素\n");
        printf("4 输出当前表中的元素\n");
        printf("0 退出\n");
        printf("please choice:");
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            printf("n=");
            scanf("%d",&n);
            h=CreateList(n);
            printfList(h);
            printf("list elements is:\n");
            break;
        case 2:
            printf("intput the position of intsert element:");
            scanf("%d",&i);
            printf("input name of the student:");
            scanf("%s",name);
            printf("intput the score of the student:");
            scanf("%d",&score);
            InsertList(h,i,name,score,n);
            printf("list elements is:\n");
            printfList(h);
            break;
        case 3:
            printf("intput the position of delete element");
            scanf("%d",&i);
            DeleteList(h,i,n);
            printf("list elements is:\n");
            printfList(h);
            break;
        case 4:
            printf("list elements is:\n");
            printfList(h);
            break;
        case 0:
            return ;
            break;
        default:
            printf("ERROR!Try again!\n\n");
        }
    }
}
void InsertList(ListNode *h,int i,char name[],int e,int n)//插入结点
{
    ListNode *q,*p;
    int j;
    if(i<1||i>n+1)
        printf("error!please input again\n");
    else
    {
        j=0;
        p=h;
        while(j<i-1)
        {
            p=p->next;
            j++;
        }
        q=(ListNode *)malloc(sizeof(ListNode));
        strcpy(q->name,name);
        q->score=e;
        q->next=p->next;
        p->next=q;
    }
}
void DeleteList(ListNode *h,int i,int n)//删除结点
{
    ListNode *p,*q;
    int j;
    char name[10];
    int score;
    if(i<1||in>n)
    {
        printf("error!please input again.\n");
    }
    else
    {
        j=0;
        p=h;
        while(j<i-1)
        {
            p=p->next;
            j++;
        }
        q=p->next;
        p->next=q->next;
        strcpy(name,q->name);
        score=q->score;
        free(q);
        printf("name:%s,score:%d\n",name,score);
    }
}
2013-10-17 09:21
快速回复:新手谁能教一下我数据链表的创建与运用啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090588 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved