用c语言编写,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查找,插入(9,3),书上看不懂

作者&投稿:艾肢 (若有异议请与网页底部的电邮联系)
用c语言编写程序,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查找,插入(9,3)和删除~

void foo(struct node *a)
{
while (a->next != NULL)
{
printf("%d", a->val);
a = a->next;
}
printf("
");
}

// 插入
void insert(struct node *a, struct node *b, int n)
{
int i;
for (i = 1; i < n - 1; i++)
a = a->next;
b->next = a->next;
a->next = b;
}

// 删除
void del(struct node *a)
{
struct node *tmp;
while (a)
{
tmp = a;
a = a->next;
free(tmp);
}
}

int main(void)
{
struct node *a = create();
struct node *b = (struct node*)malloc(sizeof(struct node));
b->val = 9;
foo(a);
insert(a, b, 3);
foo(a);
del(a);
return 0;
}

代码如下:
/*用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,学号,姓名,成绩(实现添加,删除,查询,排序,平均)*/
#include
#include
#include
#include
using namespace std;
const int n=5;
/*
* nodeEntry : 节点数据类型
* nodeADT : 节点结构
* linkADT : 链表结构
*/
typedef struct Student
{
int num;
char name[30];
char sex;
float score1;//语文
float score2;//数学
float score3;//英语
//struct Student *next;
}Student;
typedef struct linkCDT {
nodeADT head;
}*linkADT;
/*
* InitLink : 初始化链表
* CreateNode : 创建节点
* AppendLink : 添加数据
*/
nodeADT CreateNode(Student entry) {
nodeADT p=(nodeADT)malloc(sizeof*p);
p->entry=entry,p->next=0;
return p;
}
/*
SortLink : 排序链表
//按学号排序
void SortLinkID(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.num>=p->entry.num)
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
//按英语成绩排序
void SortLinkEnglish(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.score3>=p->entry.score3)
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
}
//按姓名的字典序进行排序
void SortLinkName(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.name[0]>=p->entry.name[0])
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
}
//按姓名的长度进行排序
void SortLinkNameLength(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (strlen(pHead->entry.name)>=strlen(p->entry.name))
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}

循环链表是与单链表一样
是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。
循环链表的运算与单链表的运算基本一致。所不同的有以下几点:
1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。
2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。
以上内容参考:百度百科-链表

纯手工,自己调试的,望楼主加分,不懂可追问
#include <stdio.h>
#include <malloc.h>
typedef struct List
{
int data;
List* next;
}List;

List* Init(int n)
{
List *p, *q, *head;
int i = 0;
q = (List*)malloc(sizeof(List));
p = (List*)malloc(sizeof(List));
head = (List*)malloc(sizeof(List));
head = p;
while (n != i)
{
i++;
printf("第%d个元素:", i);
scanf("%d", &p->data);
q = (List*)malloc(sizeof(List));
p->next = q;
if (n == i)
{
p->next = NULL;
}
else
{
p = q;
}
}
return head;
}

void Print(List* l)
{
List* p;
for (p = l; p != NULL; p=p->next)
{
printf("%d ", p->data);
}
printf("\n");
}

bool Find(List* l, int d)
{
List* p;
for (p = l; p != NULL; p=p->next)
{
if (p->data == d)
{
return true;
}
}
return false;
}

void Insert(List* l, int pos, int d)
{
List *p, *q;
q = (List*)malloc(sizeof(List));
int i = 0;
for (p = l; p != NULL; p=p->next)
{
if (pos == i + 2)
{
q->data = d;
q->next = p->next;
p->next = q;
return;
}
i++;
}
printf("插入失败!\n");

}

void main()
{
List *L;
int n;
L = Init(6);
Print(L);
printf("查找:");
scanf("%d", &n);
if (Find(L, n))
{
printf("找到!\n");
}
else
{
printf("找不到!\n");
}
printf("在第3个位置插入9\n");
Insert(L, 3, 9);
Print(L);
}

//输出有序链表

#include "stdio.h"
#include "malloc.h"

//函数
struct student *insert(struct student *head,int pdata);
struct student * creatlist();
struct student *deletelist(struct student *head,int ddata);
//结构体
struct student
{
int data;
struct student *next;
};

//建立
struct student * creatlist()
{
struct student *head;
int pdata;

head = (struct student *)malloc(sizeof(struct student));
head->next = NULL;

scanf("%d",&pdata);
head = insert(head,pdata);
return head;
}

//插入
struct student *insert(struct student *head,int pdata)
{
struct student *p1,*p2,*p3;

while(pdata)
{
p1 = (struct student *)malloc(sizeof(struct student));
p1->data = pdata;
//排序
p3 = head;
p2 = head->next;

while(p2!=NULL && p2->data<p1->data)
{
p2 = p2->next;
p3 = p3->next;
}

//插入p1插入到p3之后
p1->next = p3->next;
p3->next = p1;
scanf("%d",&pdata);
}
return head;
}

//删除
struct student *deletelist(struct student *head,int ddata)
{
struct student *p1,*p2;
p1 = head;
p2 = p1->next;
while(p2)
{
if(ddata == p2->data)
{
p1->next = p2->next;
p2 = p2->next;
}
else
{
p1 = p1->next;
p2 = p2->next;
}
}
return head;
}

//遍历
void printlist(struct student * head)
{
struct student * phead;
phead = head->next;
while(phead)
{
printf("%4d",phead->data);
phead = phead->next;
}
printf("\n");
}

main()
{
struct student * mhead;
int i,mdata;
printf("输入数据\n");
mhead = creatlist();
printlist(mhead);
printf("1插入 2删除 3遍历 \n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("输入数据\n");
scanf("%d",&mdata);
mhead = insert(mhead,mdata);
printlist(mhead);
break;
case 2:
printf("输入数据(以0结束)\n");
scanf("%d",&mdata);
mhead = deletelist(mhead,mdata);
printlist(mhead);
break;
case 3:
printlist(mhead);
break;
}
}

这个其实很简单,每本数据结构上都有讲, 你总不能让我帮你写吧, 这是最基础的啊!

去百度查有个女的讲的链表的视频 举的就是单向链表的例子 写的灰常的好 灰常的详细 选择百度视频 打上c++ 链表 就可以了


用C语言编写一段程序,要求是按学号打印学生名单,用结构体或数组。急...
low=i+1;} return -1;} void main(){ char a[10][20];int b[10];int *p;int c,k;Input(a,b);Sort(a,b);printf("请输入编号\\n");scanf("%d",&c);p=&c;k=Search(a,b,p);if(k==-1)printf("没有该人");else printf("编号为%d,名字为%s\\n",b[k],a[k]);} ...

C语言(简单的)编写程序输入任意一串字符统计其中大写字母,小写字母。数 ...
include <stdio.h> void count(char*);int main(){ char ch[100]={0};scanf("%s", ch);count(ch);return 0;} void count(char* ch){ \/\/分别记录大写,小写,数字的个数。int big=0, small=0, character=0,qita = 0;while (*ch){ if ((*ch>='A')&&(*ch<='Z')){ ++...

用c语言在屏幕上实现显示一个简单的加(add),减(sud),乘(mul),除...
include <stdio.h> int main (void){ int a ,b;printf("请输入俩个数:");scanf("%d,%d",&a,&b);printf("这俩个数add:%d",a+b);printf("这俩个数sub:%d",a-b);printf("这俩个数mul:%d",a*b);printf("这俩个数div:%d",a\/b);return 0;} ...

c语言简单程序编写?
include<stdio.h> int main(){ double num1, num2, result, re;char sign, euq;printf("Enter an expression: ");while(scanf("%lf%c%lf%c%lf", &num1,&sign,&num2,&euq,&result) == 5){ switch(sign){ case '+':re = num1 + num2;break;case '-':re = num1 - num...

如何用c语言实现文本菜单界面
\/*** 函数名:Menu* 功能:绘制主菜单界面,并根据输入转跳到其它功能***\/int Menu(){char cScan;\/\/cScan用于记录键盘的输入\/* ┏━┓┃┛┗ *\/printf("\\n\\n");printf("\\t┏━━━┓\\n");printf("\\t┃ 欢迎使用员工管理系统BetaV1.0 ┃\\n");printf("\\t┃ ...

用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
\/\/打开文件后,如下 步骤写程序 include <stdio.h>\/\/首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数 \/\/接下来需要写一个main函数,这也是c语言程序里必不可少的一个函数,叫主函数,他是整个程序的入口函数,程序所有的功能实现都要在这个函数中体现。但是这个函数...

c做游戏代码简单游戏代码c语言
在游戏循环中,它依次调用了三个函数:update_game_state、handle_input和draw_game。这些函数可以在其他地方定义,并且根据游戏的需要执行各种操作。除了循环之外,C语言还提供了一些其他的功能,例如条件语句、循环语句和函数。这些功能可以帮助你编写更复杂的游戏代码,例如实现游戏人物的移动、实现游戏的物理...

用c语言编写一个程序。
“该单词的后面紧跟着再次出现自己本身”怎么理解?大体说说思路,你得有个算法判断什么样的字符串算一个“单词”,可根据ASCII码,单词中可以有大小写字母,空格(\\r,\\t,\\n),其他字符(&、*、……)都可以分隔单词。输入一个字符串,程序算法切割为“单词”,存入链表或者数据库,再读入之后查询...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
stud *head; \/*head是保存单链表的表头结点地址的指针*\/ number

用C语言编写程序:从键盘输入一串字符,按回车键后结束,最后将字符串在屏...
include<stdio.h> void main(){ char *p[20];printf("\\n Please input some chars:");scanf("%s",p);printf("\\n You inputed: %s\\n",p);getchar();} 注意,该程序最多可输入20个字符,如果要更多,自己把*p[20];里的数字改得列大就行了 ...

高港区13088724466: 用c语言编写程序,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查找,插入(9,3)和删除 -
莫解力弘: void foo(struct node *a) { while (a->next != NULL) {printf("%d\t", a->val);a = a->next; }printf("\n"); }// 插入 void insert(struct node *a, struct node *b, int n) { int i; for (i = 1; i a = a->next;b->next = a->next; a->next = b; }// 删除 void del(struct ...

高港区13088724466: C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置 -
莫解力弘: /** *时间:2010年8月28日17:19:49 *功能:C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置 */ #include"stdio.h" #include"stdlib.h" #include"malloc.h" /*假设输入的数据为3个--我比较好操作-_-*/ #define size 3typedef ...

高港区13088724466: 用c语言编写,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查找,插入(9,3),书上看不懂 -
莫解力弘: 纯手工,自己调试的,望楼主加分,不懂可追问#include <stdio.h>#include <malloc.h> typedef struct List { int data; List* next; }List; List* Init(int n) { List *p, *q, *head; int i = 0; q = (List*)malloc(sizeof(List)); p = (List*)malloc(sizeof(List)); head = (List*)...

高港区13088724466: 用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完整程序 -
莫解力弘: 这是个很简单的链表创建和输出#include<stdio.h>#include<stdlib.h> typedef struct linkednode { char data; struct linkednode *next; }node,*link_list;//链表节点的结构及重命名 link_list creat()//创建一个链表返回类型是链表的首地址 { link_list L; ...

高港区13088724466: 用C语言编程(创建一个单向链表) -
莫解力弘: *creat a list*/ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; void main() { link ptr,head; int num,i; ptr=(link)malloc(sizeof(node)); ptr=head; printf("please input 5 numbers==>...

高港区13088724466: 一道数据结构 用C语言建立单链表的编程题目,求助. -
莫解力弘: 这个程序是以前做的,看起来复杂,其实是太多的判断和提示内容而已,你看看主函数,再运行一下,再看看创建链表的函数,关键部分并不多,应该不难看懂,另外模块我...

高港区13088724466: 创建一个单链表(用C写)急! -
莫解力弘: #include "stdio.h"#include "malloc.h" typedef struct node { int data; struct node *next; }linklist; int main() {//尾插法建立链表 linklist *h=NULL,*s,*r; char c; do { s=(linklist *)malloc(sizeof(linklist)); printf("请输入链表信息(整数)"); scanf(...

高港区13088724466: 用C语言编程实现单链表的基本操作 -
莫解力弘: 运行结果如下: 完整代码如下: #include<stdio.h> #include<stdlib.h> typedef struct LNode {char data;LNode *next; }* LNodePtr; LNodePtr CreateList() {//初始化头节点LNodePtr head = (LNodePtr)malloc(sizeof(LNode));head->data ...

高港区13088724466: c语言构建一个最简单的单链表 -
莫解力弘: typedef struct node { char name[20]; struct node *link; }stud; 下面就来看一个建立带表头(若未说明,以下所指 链表 均带表头)的单 链表 的完整程序. #include#include/*包含动态内存分配函数的头文件*/ #define N 10 /*N为人数*/ typedef ...

高港区13088724466: 用c语言编写,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查找,插入(9,3),书上看不懂
莫解力弘: 纯手工,自己调试的,望楼主加分,不懂可追问 #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; typedef struct List { int data; List* next; }List; List* Init(int n) { List *p, *q, *head; int i = 0; q = (List*)malloc(sizeof(List)); p = (List*)malloc(sizeof(List)); ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网