C语言单向链表的创建,输入,插入和删除的实现

栏目:资讯发布:2023-11-06浏览:3收藏

C语言单向链表的创建,输入,插入和删除的实现,第1张

/ 线性表-链表的操作: 只提供核心语句 /

#include "stdioh"

#include "stdlibh"

#define N 100

typedef int ElemType;/ 链表的存储结构 /

typedef struct LNode{

ElemType data;

struct LNode next; } LNode,LinkList;/ 链表的基本操作 // 1初始化链表 /

void InitList(LinkList L)

{ L=(LinkList)malloc(sizeof(LNode));

(L)->next=NULL; }/ 2销毁链表 /

void DestroyList(LinkList L)

{ LinkList p;

while(L!=NULL)

{ p=L;

L=(L)->next;

free(p); }

}

/ 10在顺序表第n个位置插入元素e /

void ListInsert(LinkList L, int n, ElemType e)

{ LinkList p,q,new; int i;

q=L; p=(L)->next; i=1;

while (p!=NULL && i<n) { q=p; p=p->next; i++; }

new=(LinkList)malloc(sizeof(LNode));

new->data=e;

q->next=new; new->next=p; }/ 11删除链表中第n个位置的元素 /

void ListDelete(LinkList L, int n, ElemType e)

{ LinkList p,q; int i;

q=L; p=(L)->next; i=1;

while (p!=NULL && i<n) { q=p; p=p->next; i++; }

e=p->data;

q->next=p->next; free(p); }/ 12遍历链表并输出 /

void ListTraverse(LinkList L)

{ LinkList p;

printf("\nList:\t");

p=L->next;

while (p!=NULL)

{ printf("%d\t",p->data);

p=p->next; }

}/ A(2)后接法建立顺序链表 /

void CreateList2(LinkList L, ElemType a[], int n)

{ LinkList p,new; int i;

p=L;

for(i=0; i<n; i++)

{ new=(LinkList)malloc(sizeof(LNode));

new->data=a[i];

p->next=new; p=p->next; }

p->next=NULL;

}

/ 主函数 /

main()

{ LinkList La; ElemType a[]={1,3,5,7,9},x;

InitList(&La);//初始化链表

CreateList2(&La,a,5);//建立链表并用数组赋值

ListTraverse(La);//遍历链表

ListInsert(&La, 3, 100);//第三个位置插入100

ListTraverse(La);//遍历链表

ListDelete(&La,5,&x);//删除第五个元素,用x返回

ListTraverse(La);//遍历链表 DestroyList(&La);//销毁链表

} 这是我们刚学的,保证简洁准确

#include"stdafxh"

#include "stdioh"

typedef struct node{

int data;

struct node next;

}node;

void main()

{

node create(){

node head,p,q;

q = head;

int i=0;

int x;

head=(node )malloc(sizeof(node));

while(1)

{

printf("please input the node:");

scanf("%d",&x);

if(x==0) {break;}

p=(node )malloc(sizeof(node));

p->data=x;

if(++i==1)

{

head->next=p;

}

else

{

q->next=p;

}

q=p;

}

q->next=NULL;

return head;

}

node search(node head,int pos)

{

node p;

int len=length(head);

p=head->next;

if(pos<0) {

printf("incorrect position!\n"); return NULL;

}

else if(pos>len)

{

printf("incorrect position!\n"); return NULL;

}

else if(pos==0) {

return head;

}

if(p==NULL) {

printf("the link is empty!\n"); return NULL;

}

while (--pos)

{ p=p->next; }

return p;

}

node insert(node head,int pos,int x)

{

node p,q=NULL;

q=(node )malloc(sizeof(node));

q->data=x;

if(pos==0) {

head->next=q; return head; }

p=search(head,pos);

if(p!=NULL) { q->next=p->next; p->next=q; }

return head;

}

}

// DLinkcpp : 定义控制台应用程序的入口点。

//

#include "stdafxh"

#include "malloch"

typedef struct LNode

{

int data;

struct LNode next;

}Dlink;

int _tmain(int argc, _TCHAR argv[])

{

Dlink l,s1;

Dlink s=(Dlink )malloc(sizeof(Dlink));

l=s;

for(int i=0;i<5;i++)

{

s->data=i+1;

s1=(Dlink )malloc(sizeof(Dlink));

s->next=s1;

s=s1;

}

s->next=NULL;

//数据就保存到以l为头结点的链表中了

return 0;

}

扩展资料:

对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。

其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。

由分别表示,,,的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表。

int main()

{

Link head; //链表(不带头节点)

int n;

printf("输入链表的长度n: ");

scanf("%d",&n);

printf("连续输入%d个数据(以空格隔开): ",n);

head=CreateLink(n);

printf("\n原本链表的节点是: ");

DispLink(head);

LinkSort(head);

printf("\n从大到小排序之后: ");

DispLink(head);

printf("\n");

return 0;

}

链表的具体存储表示为:

① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。

-单链表

这是个很简单的链表创建和输出

#include<stdioh>

#include<stdlibh>

typedef struct linkednode

{

char data;

struct linkednode next;

}node,link_list;//链表节点的结构及重命名

link_list creat()//创建一个链表返回类型是链表的首地址

{

link_list L;

node p1,p2;

char data;

L=(node)malloc(sizeof(node));//开辟存储空间

p2=L;

while((data=getchar())!='\n')//输入回车键时结束输入

{

p1=(node)malloc(sizeof(node));

p1->data=data;

p2->next=p1;

p2=p1;

}

p2->next=NULL;

return L;

}

void print(link_list L)//把链表输出

{

node p;

p=L->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

void main()

{

link_list L=NULL;

char x;

printf("请输入链表节点:\n");

L=creat();

print(L);

}

C语言单向链表的创建,输入,插入和删除的实现

/ 线性表-链表的操作: 只提供核心语句 /#include "stdioh"#include "stdlibh"#define N 100typedef int ElemType;/ 链表的存储结...
点击下载
热门文章
    确认删除?
    回到顶部