百度
360搜索
搜狗搜索

链表c语言经典例题,求写C语言 创建链表实例子。要最基本的 包括注释。详细介绍

本文目录一览: 求写C语言 创建链表实例子。要最基本的 包括注释。

#include

#include

typedef int datatype;typedef struct node { // 结点数据类型声明 datatype info; struct node *next;}NODE;void show(NODE *head) { // 有头结点循环链表的显示 NODE *p; for(p = head->next; p != head; p = p->next) printf("%d ",p->info); printf("\n");}NODE *josefnode(int n) { // 创建有头结点的n个结点的单向循环链表 int i; NODE *p, *head; head = p = (NODE *)malloc(sizeof(NODE)); // 首先生成头结点 head->info = 0; // 头结点的数据域初始化为0,非必要 for(i = 0; i < n; ++i) { p->next = (NODE *)malloc(sizeof(NODE)); // 得到新结点存储空间 p->next->info = i + 1; // 给新结点数据域赋值 p = p->next; // 移动指针 } p->next = head; // 尾结点的next指向头结点(head) return head; // 返回头结点地址}// 报名出列代码,有些难度void josef(int n) { // int cnt = 0; NODE *h, *p, *q; h = p = josefnode(n); // 获取链表 show(h); // 显示链表信息 while(h->next != h) { // 循环点名代码,直到有效结点个数为0 if(p->next == h) p = p->next; // 遇到头结点则跳过 ++cnt; // 点名计数器增1 if(cnt % 3 == 0) { // 满足3的倍数时 q = p->next; // q指向该结点 printf("%d ",q->info); // 显示该结点数据 p->next = q->next; // 计数指针移到下一个结点 free(q); // 删除结点 } else p = p->next; // 非3 的整数倍时,继续 } printf("\n"); free(h); // 释放头结点 h = NULL;}void main() { int n; printf("请输入人数:"); scanf("%d", &n); josef(n);}

题目:创建固定长度的单向链表

程序分析:链表是动态分配存储空间的链式存储结构,

其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体数据,只是存放第一个结点的地址。

链表中每一个元素称为“结点”,每个结点都由两部分组成:存放数据元素的数据域和存储直接后继存储位置的指针域。指针域中存储的即是链表的下一个结点存储位置,是一个指针。多个结点链接成一个链表。

最后一个结点的指针域设置为空(NULL),作为链表的结束标志,表示它没有后继结点。

使用结构体变量作为链表中的结点,因为结构体变量成员可以是数值类型,字符类型,数组类型,也可以是指针类型,这样就可以使用指针类型成员来存放下一个结点的地址,使其它类型成员存放数据信息。

在创建列表时要动态为链表分配空间,C语言的库函数提供了几种函数实现动态开辟存储单元。

malloc()函数实现动态开辟存储单元:

malloc函数原型为:void *malloc(unsigned int size); 其作用是在内存的动态存储区中分配一个长度为size的连续空间,函数返回值是一个指向分配域起始地址的指针(类型为void)。如果分配空间失败(如,内存空间不足),则返回空间指针(NULL)

#include

#include

struct LNode{int data;struct LNode *next;};/*上面只是定义了一个结构体类型,并未实际分配内存空间只有定义了变量才分配内存空间*/struct LNode *creat(int n){int i;struct LNode *head,*p1,*p2;/*head用来标记链表,p1总是用来指向新分配的内存空间,p2总是指向尾结点,并通过p2来链入新分配的结点*/int a;head=NULL;for(i=1;i<=n;i++){p1=(struct LNode *)malloc(sizeof(struct LNode));/*动态分配内存空间,并数据转换为(struct LNode)类型*/printf("请输入链表中的第%d个数:",i);scanf("%d",&a);p1->data=a;if(head==NULL)/*指定链表的头指针*/{head=p1;p2=p1;}else{p2->next=p1;p2=p1;}p2->next=NULL;/*尾结点的后继指针为NULL(空)*/}return head;/*返回链表的头指针*/}void main(){int n;struct LNode *q;printf("请输入链表的长度:/n");scanf("%d",&n);q=creat(n);/*链表的头指针(head)来标记整个链表*/printf("/n链表中的数据:/n");while(q)/*直到结点q为NULL结束循环*/{printf("%d ",q->data);/*输出结点中的值*/q=q->next;/*指向下一个结点*/}}

链表习题(C语言)

设链表长度为n,找到倒数第m个元素(约定0为最后一个元素),也就是找到正数第n - m - 1个元素,计数方法当然也是从0开始。
#include

#include

typedef int DataType;typedef struct list { DataType elem; struct list *next;}*LIST,*pNode;LIST InitList() { LIST L = (pNode)malloc(sizeof(struct list)); L->elem = 0; L->next = NULL; return L;}void CreateList(LIST L, DataType a[], int n) { int i; pNode p = L; for(i = 0; i < n; ++i) { p->next = (pNode)malloc(sizeof(struct list)); p->next->elem = a[i]; p = p->next; } p->next = NULL;}int lenList(LIST L) { // 求取表长 int len = 0; pNode p = L->next; // 有头结点 while(p) { ++len; p = p->next; } return len;}int GetData(LIST L,int m,DataType *e) { int i = -1,len = lenList(L); pNode p = L->next; if(m < 0 || m > len - 1) { printf("没有第 %d 个元素。\n",m); return 0; } while(i < len - m - 1) { ++i; p = p->next; } *e = p->elem; return 1;}int main() { DataType arr[] = {16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; int n,m,res; LIST L = InitList(); n = sizeof(arr)/sizeof(arr[0]); CreateList(L,arr,n); while(scanf("%d",&m) == 1) { if(GetData(L,m,&res)) printf("倒数第 %d 元素是:%d.\n",m,res); } return 0;}

链表基本操作练习(C语言)

说真的,你的分数太少了.当我弄了一半的时候才觉得有点不值,但又不想半途而废,最终还是帮你做了,所以希望你能及时采纳,这可是我弄了好久的呀!
好了,最后还帮你修改了一遍,已经编译通过的了.并且检查过可以完成你说的功能的了.
#include

#include

typedef struct list

{

int num;struct lst *next;

} LST;

LST *mycreat()

{

int data=0;

LST *head=NULL,*p=NULL,*q=NULL;

head=(LST*)malloc(sizeof(LST));

q=head;

printf("请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n");

scanf("%d",&data);

while(data!=-1)

{

p=(LST*)malloc(sizeof(LST));

q->next=p;

p->num=data;

q=p;

scanf("%d",&data);

}

q->next=NULL;

return head;

}

void mycheck(LST *head)

{

int i=0,x=0;

LST *p=NULL;

printf("\n请输入要查询的结点:\n");

scanf("%d",&x);

p=head;

while(p!=NULL)

if(i!=x)

{

p=p->next;

i++;

}

else break;

if(p!=NULL)printf("\nthe %d node is %d\n",x,p->num);

else printf("\n there is no this node\n");

}

int mydelete (LST* head,int m)

{

LST *p=NULL,*q=NULL;

q=head;

p=head->next;

while(p!=NULL)

if(m!=p->num)

{

q=q->next;

p=p->next;

}

else break;

if(p==NULL) return 0;

q->next=p->next;

free(p);

return 1;

}

void myprint(LST *head)

{

LST *p=NULL;

p=head->next;

if(p==NULL)printf("\n empty list!");

else

do

{

printf("\n%5d\n",p->num);

p=p->next;

}while(p!=NULL);

printf("\n");

}

int thelength(LST *head)

{

int length=0;

LST *p=NULL;

p=head;

while(p!=NULL)

{

p=p->next;

length++;

}

return length;

}

void clear(LST *head)

{

LST *p=NULL;

p=head;

while(p->next!=NULL)

{

p=p->next;

p->num=0;

}

}

main()

{

int k=0,m=0,l=0;

LST *head=NULL;

head=mycreat();

mycheck(head);

printf("to delete list:");

scanf("%d",&m);

k=mydelete(head,m);

if(k==1)

{

printf("after deleting");

myprint(head);

}

else printf("not exist.\n");

l=thelength(head);

printf("the length is %d",l);

clear(head);

}

C语言问题:建立一个有三个结点的链表,然后输出每个结点的数据。

//---------------------------------------------------------------------------
#include

#include

#include

typedef struct node{

char num;

int score;

struct node *next;

} node;

node *create(int n) /*创建有n个结点的单链表*/

{

node *rt=NULL;

node *now;

node *nt=NULL;

int i;

srand(time(NULL));

for (i = 0,rt=now=malloc(sizeof(node)); i
<n; i++) {
if (i) {

nt=malloc(sizeof(node));

nt->next=NULL;

nt->num=rand()%26+'a'; /*对数据域值,此处采用随机数赋值,可以改为从键盘输入*/

nt->score=rand()%101; /*对数据域值,此处采用随机数赋值,可以改为从键盘输入*/

now->next=nt;

now=now->next ;

}

else{

now->num=rand()%26+'a'; /*对数据域值,此处采用随机数赋值,可以改为从键盘输入*/

now->score=rand()%101; /*对数据域值,此处采用随机数赋值,可以改为从键盘输入*/

now->next=NULL;

}

}

return rt;

}

void prt(node *a) /*输出单链表*/

{

while (a)

{

printf("NUM:\t\t%c\nSCORE:\t\t%d\n\n",a->num,a->score);

a=a->next;

}

}

void nfree(node *a) /*释放空间*/

{

node *b;

while (a)

{

b=a->next;

free(a);

a=b;

}

}

int main(void)

{

node *na=create(3); /*调用create()创建包含3个结点的单链表*/

prt(na);

nfree(na);

return 0;

}

//---------------------------------------------------------------------------

#include

阅读更多 >>>  尾插是什么

#include

//链表结构类型 typedef struct Node{ char num; int score; Node* next;}*List;int main(){ List L; //创建三个结点 Node* l1=(Node*)malloc(sizeof(Node)); Node* l2=(Node*)malloc(sizeof(Node)); Node* l3=(Node*)malloc(sizeof(Node)); //修改三个结点信息 l1->num='1'; l1->score=100; l2->num='2'; l2->score=85; l3->num='3'; l3->score=60; //连接关系 L=l1; l1->next=l2; l2->next=l3; l3->next=NULL; //循环输出链表信息 Node* p=L; while(p!=NULL){ printf("num:%c\n",p->num); printf("score:%d\n\n",p->score); p=p->next; } //删除链表 free(l1); free(l2); free(l3); return 0;}

#include

#include

#include

#include

#define MY_MALLOC_TYPEDEF(td) (td *)calloc(1, sizeof(td))//定义一个结构体typedef struct node{ int age; char name[64]; struct node *next;}STU;STU *head, *tail;STU *createEntry(int age, char *name){ STU *entry; entry = MY_MALLOC_TYPEDEF(STU); if(NULL == entry) { return NULL; } entry->age = age; strcpy(entry->name, name); //尾插法 if(NULL == head) { head = tail = entry; return entry; } tail->next = entry; tail = tail->next; return entry;}void showList(STU *list){ if(NULL == list) { printf("List is empty!\n"); return; } while(list) { printf("%s/%d ", list->name, list->age); list = list->next; } printf("\n");}int main(int argc, char **argv){ STU *p, *q, *t; //创建3个节点 q = createEntry(18, "persona"); p = createEntry(19, "personb"); t = createEntry(20, "personc"); showList(head); return 0;}

#include

#include

#define LEN sizeof(struct student)

struct student //定义一个结构体student

{

char num[10];

int score;

struct student *next;//指向下个结点的指针

};

struct student *head;//定义一个链表头指针

void main()

{

int i;

struct student *p;

for(i=1;i<4;i++)

{

p=(struct student *)malloc(LEN);

printf("\n请输入学号和成绩:");

scanf("%s%d",p->num,&(p->score));

if(i==1)

{

head=p;

head->next=NULL;

}

else if(i==2)

{

head->next=p;

p->next=NULL;

}

else

{

(head->next)->next=p;

p->next=NULL;

}

}

p=head;

while(p!=NULL)

{

printf("\n%10s%5d\n",p->num,p->score);//输出当前结点

p=p->next;//p指向下个结点

}

}

#include

struct Node{ char num[10]; int score; struct Node *next;//(指针)};int main (void){ struct Node tt[3] ={ {"111",66,&tt[1]},{"222",77,&tt[2]},{"333",88,NULL}}; struct Node *p; p = tt; while(p) { printf("%d\n",p->score); p = p->next; } return 0;}667788Press any key to continue我来个简单的 静态三个节点的链表 网上那些动态链表是有些复杂

//class CLinkList

#include "CLinkList.h"

#include "CNode.h"

CLinkList::CLinkList()

{

cout << "这个是构造函数"<< endl;

m_Head = &m_Node; //链表的头指针指向头结点

m_Node.SetNodeData(0, 0); //给头结点的内容赋0值

m_Node.SetNodeNext(NULL); //将头结点的Next指针设置为NULL;

}

CLinkList::~CLinkList()

{

cout << "这个是析构函数" << endl;

}

void CLinkList::CreateList() //以向后追加的方式创建一个链表,输入0退出

{

int nScore = 0; //定义一个临时的整形变量来保存数据

char chNum = 0; //定义一个临时的字符型变量来保存数据

cout << "欢迎来创建链表 !" << endl;

CNode * pTemp = NULL; //定义一个临时结点指针,用来增加新结点用

CNode * pNode = m_Head; //定义一个标记指针,首先叫其指向头结点

while(1)

{

pTemp = new LinkNode;

cout << "请输入下一个结点的内容!" << endl;

cin >> nScore; //输入0退出

cin >> chNum;

if ('0' == nScore)

{

break;

}

pTemp->SetNodeData(nScore, chNum); //给新结点的内容赋值

pNode->SetNodeNext(pTemp); //让链尾的Next指向新建的结点

pNode = pTemp; //将结尾元素向后移

}

cout << "创建链表结束" << endl;

}

LinkNode* CLinkList::GetListNode(int _nIndex)

{

cout << "这个是按位置查找指定位结点的成员函数" << endl;

LinkNode* pNode = m_Head->GetNodeNext(); //定义一个临时的结点指针,初始化指向头结点

int Temp = 0; //定义一个临时的变量,用来标记已检查结点的个数的

if(-1 == _nIndex) //返回头结点(即头指针)

{

return m_Head;

}

if(_nIndex < -1) //_nIndex控制条件

{

cout << "您输入的是错误的位置!" << endl;

return 0;

}

while(pNode != NULL)

{

if(_nIndex == Temp)

{

return pNode;

}

pNode = pNode->GetNodeNext(); //临时结点向后移动

++Temp;

}

return pNode; //没找到结点就返回NULL

}

void CLinkList::InsertList(int _nIndex, int _nScore, char _chNum) //插入结点的函数成员

{

cout << "这个是插入结点的成员函数" << endl;

LinkNode* pNode = GetListNode(_nIndex - 1); //定义一个结点类的指针,指向的是要插入位置的前一指针

LinkNode* pTemp = new CNode; //定义一个临时结点指针,用来增加新结点用

pTemp->SetNodeData(_nScore, _chNum); //设置插入结点的内容

pTemp->SetNodeNext(pNode->GetNodeNext());

pNode->SetNodeNext(pTemp);

}

void CLinkList::DeleteList(int _nIndex)

{

cout << "这个是删除某一结点的成员函数" << endl;

LinkNode* pNode = GetListNode(_nIndex - 1); //定义一个结点类的指针,指向的是要删除位置的前一指针

LinkNode* pTemp = NULL; //定义一个临时结点指针,用来指向要删除的结点

pTemp =pNode->GetNodeNext(); //把pTemp指向要删除的结点

pNode->SetNodeNext(pTemp->GetNodeNext()); //把pNode指向要删除的结点的后一个结点

delete pTemp; //删除结点

pTemp = NULL;

}

LinkNode* CLinkList::GetHeadList()

{

cout << "这个是获取头指针的成员函数" << endl;

return m_Head;

}

void CLinkList::SetListData(int _nIndex, int _nScore, char _chNum)

{

cout << "这个是设置链表中某一结点的值的成员函数" << endl;

CNode *pNode = GetListNode(_nIndex); //定义一个结点类的指针,指向的是要修改内容位置的结点

pNode->SetNodeData(_nScore, _chNum); //修改内容

}

void CLinkList::ShowListData(int _nIndex)

{

cout << "这个是显示链表中某一结点值的成员函数" << endl;

CNode *pNode = GetListNode(_nIndex); //定义一个结点类的指针,指向的是要获取内容位置的结点

pNode->ShowNodeData(); //返回想要得到位置的结点内容

}

void CLinkList::DestroyList(int _nIndex)

{

cout << "这个是销毁某一位置以后链表的成员函数" << endl;

LinkNode* pTemp = GetListNode(_nIndex - 1); //定义一个结点指针,指向要销毁位置的前一结点

LinkNode* pNode = pTemp->GetNodeNext(); //定义一个结点指针,指向要销毁位置的结点

while(pTemp->GetNodeNext() != NULL) //销毁动作的结束条件或初始条件

{

pTemp->SetNodeNext(pNode->GetNodeNext()); //把需要销毁的位置的前结点的Next指向销毁位置的下一个结点

delete pNode; //销毁结点

pNode = pTemp->GetNodeNext(); //把pNode重新指向要销毁位置的结点

}

}

void CLinkList::ShowList()

{

cout << "这个是显示链表的成员函数" << endl;

int nTemp = 0; //定义一个临时的整形变量用来控制输入的个数

LinkNode* pTemp = m_Head->GetNodeNext(); //定义一个结点类指针,指向第0位的结点

if(NULL == pTemp)

{

cout << "这是个空链" << endl;

}

while(pTemp != NULL)

{

pTemp->ShowNodeData();

++nTemp;

if(0 == nTemp % 5 && nTemp != 0) //控制每行只能输出5个结点的内容

{

cout << endl;

}

pTemp = pTemp->GetNodeNext();

}

}

//class CNode

#include "CNode.h"

CNode::CNode()

{

int m_nScore = 0;

char m_chNum = 0;

m_Next = NULL;

}

CNode::~CNode()

{

}

void CNode::SetNodeData(int _nScore, char _chNum)

{

m_nScore = _nScore;

m_chNum = _chNum;

}

void CNode::ShowNodeData()

{

cout << m_nScore << '\t' << m_chNum << endl;

}

void CNode::SetNodeNext(CNode* _Next)

{

m_Next = _Next;

}

CNode* CNode::GetNodeNext()

{

return m_Next;

}

#include "CLinkList.h"

#include "CNode.h"

void Text(); //测试函数声明

int main()

{

cout << "这是mian函数" << endl;

Text();

return 0;

}

void Text()

{

cout << "这个是测试函数" << endl;

LinkList* pList = new LinkList; //创建一个内存链表对象

cout << "------------------CreateList-----------------------------" << endl;

pList->CreateList(); //初始化链表的函数成员

pList->ShowList();

cout << endl;

cout << "------------------GetListNode-----------------------------" << endl;

LinkNode* pNode = NULL; //定义一个临时的结点类指针用于检测查找函数成员

pNode = pList->GetListNode(3); //按位置查找指定位结点的成员函数的测试

if(pNode)

{

cout << "用按位置查找的方法找到了指定位结点" << endl;

}

else

{

cout << "对不起,用按位置查找的方没有找到指定位结点" << endl;

}

cout << endl;

cout << "------------------InsertList-----------------------------" << endl;

pList->InsertList(0, 9, 'x'); //插入结点的成员函数的测试

pList->ShowList();

cout << endl;

cout << "------------------DeleteList-----------------------------" << endl;

pList->DeleteList(0); //删除某一结点的成员函数的测试

pList->ShowList();

cout << endl;

cout << "------------------GetHeadList-----------------------------" << endl;

pNode = NULL;

pNode = pList->GetHeadList(); //获取头指针的成员函数的测试

if(pNode)

{

cout << "已经返回了头指针" << endl;

}

else

{

cout << "对不起,头指针为空" << endl;

}

cout << endl;

cout << "------------------GetHeadList-----------------------------" << endl;

pList->SetListData(3, 7 , '@'); //设置链表中某一结点的值的成员函数的测试

pList->ShowList();

cout << endl;

cout << "------------------GetListData-----------------------------" << endl;

cout << "pList->ShowListData(3) =";

pList->ShowListData(3); //获取链中某一结点值的成员函数的测试

cout << endl;

cout << "------------------DestroyList(3)-----------------------------" << endl;

pList->DestroyList(3); //销毁第3位置以后链表的成员函数的测试

pList->ShowList();

cout << endl;

cout << "------------------DestroyList(0)-----------------------------" << endl;

pList->DestroyList(0); //销毁第0位置以后链表的成员函数的测试

pList->ShowList();

cout << endl;

delete pList; //释放内存

pList = NULL; //指针置空

}

这个是按照我以前写的链表改写的 , 应该有些功能你用不到 , 可以删掉的 , 基本上都有注释的,自己看着改,,后面的很多都是测试程序, 自己看那个不想要也可以删掉

阅读更多 >>>  linux怎么升级nodejs

C语言,创建一个链表并赋值1、2、3、4、5,麻烦把全部程序写下

// DLink.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "malloc.h"
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 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表。

C语言程序题:两个有序单链表的合并 合并之后仍然有序。 如第一个链表13579 第二个链表

#include

#include

struct list{ int data; struct list *next;};//两个链表融合,插入排序函数void sort(struct list *l1,struct list *l2);//输出链表void output(struct list *head);//输入链表void input(struct list *head,int num);int main(){ int n; list *h1,*h2; //两个链表的头,下面四行初始化链表 h1=(struct list*)malloc(sizeof(struct list)); h2=(struct list*)malloc(sizeof(struct list)); h1->next=NULL; h2->next=NULL; //两个链表输入 printf("请输入第一个链表节点数:\n"); scanf("%d",&n); input(h1,n); printf("请输入第二个链表节点数:\n"); scanf("%d",&n); input(h2,n); //合并链表并排序 sort(h1,h2); //输出合并后的链表 output(h1);}void input(struct list *head,int num){ struct list *tmp; struct list *end; end=head; printf("请输入链表节点:\n"); for(int i=0;i!=num;i++) { tmp=(struct list *)malloc(sizeof(struct list)); scanf("%d",&tmp->data); end->next=tmp; tmp->next=NULL; end=tmp; }}void sort(struct list *l1,struct list *l2){ struct list *p1,*p2,*tmp; p1=l1; p2=l2->next; while(p1->next&&p2) { if(p1->next->data>p2->data) { tmp=p2->next; p2->next=p1->next; p1->next=p2; p2=tmp; } else p1=p1->next; } if(p2) p1->next=p2;}void output(struct list *head){ while(head->next) { printf(" %d ",head->next->data); head=head->next; }}

ListNode*ReNewCombineList(ListNode*p1,ListNode*p2)//合并两个链表,,生成第三个链表递归

{

ListNode*pNewList=NULL;

//ListNode*p3=NULL;

if(p1==NULL)

return p2;

if(p2==NULL)

return p1;

if(p1->data

data)

{

pNewList=p1;

pNewList->next=ReNewCombineList(p1->next,p2);

}

else

{

pNewList=p2;

pNewList->next=ReNewCombineList(p1,p2->next);

}

return pNewList;

}

扩展资料:return

C++的关键字,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值.

说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助.

很多人甚至市面上的一些书籍,都使用了void main(),其实这是错误的。C/C++中从来没有定义过void main()。

C++之父Bjarne Stroustrup在他的主页上的FAQ中明确地写着The definition void main(){/*...*/}is not and never has been C++,

nor has it even been C.(void main()从来就不存在于C++或者C)。下面我分别说一下C和C++标准中对main函数的定义。

1.C

在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的经典巨著The C programming Language 2e(《C程序设计语言第二版》)用的就是main()。不过在最新的C99标准中,只有以下两种定义方式是正确的:

int main(void)

int main(int argc,char*argv[])

(参考资料:ISO/IEC 9899:1999(E)Programming languages—C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char*argv[]可以写成char**argv;argv和argc可以改成别的变量名(如intval和charval),不过一定要符合变量的命名规则。

如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc,char*argv[])。

main函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统)。

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。

注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return语句了吧!不过,gcc3.2(Linux下的C编译器)会在生成的目标文件中加入return 0;。

求高手:C语言链表类上机题

1、*n 2、next 3、head
1.SLIST *creatlist(int *a);
根据指针a指向的大小为N的数组,创建单链表,并将头结点的指针作为返回值
2.void outlist(SLIST *);
outlist是个函数,不过此处是函数声明,函数的定义在main()函数之后

C语言 大一简单题目 链表 求解答

【正确答案】A
"互换"就是说,之前的链表为head——p——q——……,互换后变为head——q——p-——……
【注意】互换过程中原链表的结点信息不能丢!!!
->是结构体指针用来取起所指向结构体的分量(的值),指向结构体内的分量 ,例如:
p->key,就是取得的结构体内部的key;
具体操作:(顺序不能变!!!!否则链表信息容易丢失)
1、head->next=q;
2、p->next=q->next;
3、q->next=p
选项B、C、D都丢失了原链表中q以后的所有结点的信息,所以错误。

顺序表和链表的基本操作,用C语言实现!

你照下面的这个 去写。下面的这个是顺序表的基本操作,链表和这个差不多。
#include"1.h"
void main()
{
char a[5]={'a','b','c','d','e'};
int n=5;
char f='f',b='a',e;
SqList sq;
InitList(sq); //初始化表
CreateList(sq,a,n); //传入数据
DispList(sq); //输出表
printf("sq.length=%d\n",ListLength(sq)); //输出表长
if(ListEmpty(sq)) //判断是否为空表
printf("sq是空表\n");
else
printf("sq不是空表\n");
printf("a在第%d位\n",LocateElem(sq,b)); //按元素值查找

ListInsElem(sq,f,4); //在第4个位置上插入f元素
DispList(sq); //输出表
printf("\n");
DelElem(sq,3,e); //删除第三个元素
DispList(sq); //输出表
}
这是头文件
1.h
#include

const MaxSize=100;

typedef struct SqList

{

char elem[MaxSize];

int length;

}SqList,*PSqList;

SqList sq;

void InitList(SqList &sq) //初始化线性表

{

sq.length=0;

}

void CreateList(SqList &sq,char a[],int n) //建立表

{

int i;

for(i=0;i
<n;i++)
sq.elem[i]=a[i];

sq.length=n;

}

int ListLength(SqList sq) //求表长

{

return(sq.length);

}

char GetElem(SqList sq,int i) //求第i个元素

{

if(i<1||i>sq.length)

return 0;

return sq.elem[i-1];

}

int LocateElem(SqList sq,char x) //按元素值查找

{

int i=0;

while(i
<sq.length&&sq.elem[i]!=x)
i++;

if(i>sq.length)

return 0;

else return i+1;

}

int ListInsElem(SqList &sq,char x,int i) //插入元素在第i个位置

{

int j;

if(i<1||i>sq.length+1)return 0;

for(j=sq.length;j>=i;j--)

sq.elem[j]=sq.elem[j-1];

sq.elem[i-1]=x;

sq.length++;

return 1;

}

int DelElem(SqList &sq,int i,char &e) //删除第i个元素

{

int j;

if (i<1||i>sq.length)return 0;

e=sq.elem[i];

for(j=i;j
<sq.length;j++)
sq.elem[j-1]=sq.elem[j];

sq.length--;

return 1;

}

int ListEmpty(SqList &sq) //判断表是否为空

{

return(sq.length==0);

}

void DispList(SqList sq) //输出表

{

int i;

if(ListEmpty(sq))return;

for(i=0;i
<sq.length;i++)
printf("%c\t",sq.elem[i]);

}

顺序存储的线性表的算法

#include "stdio.h"

#include "stdlib.h"

#define Status int

#define OVERFLOW 0

#define TRUE 1

#define FALSE 0

#define OK 1

#define MAXSIZE 100

typedef int ElemType;

typedef struct list

{ElemType elem[MAXSIZE];

int length;

}SqList;

void InitList(SqList &L){

L.length=0;

}

/*建立顺序表*/

void CreateList(SqList &L)

{

int i;

printf("input the length");

scanf("%d",&L.length);//输入表长

for(i=1;i<=L.length;i++)

scanf("%d",&L.elem[i-1]);//输入元素

}

//顺序表的遍历

void printdata(ElemType e){

printf("%4d",e);

}

void Traverse(SqList L,void (*visit)(ElemType e))

{ int i;

printf("The elements of the lists are:\n");

for(i=1;i<=L.length;i++){

if (i%10==0)printf("\n");//每行显示10个元素

visit(L.elem[i-1]);//输出表中元素

}

printf("\n");

}

//有序顺序表L中插入元素e使序列仍有序

void Insert(SqList &L,ElemType e)

{int i,j;

if (L.length==MAXSIZE)exit(OVERFLOW);//表满,不能插入

for(i=1;i<=L.length&&L.elem[i-1]<=e;i++);//向后查找

for(j=L.length;j>=i;j--)

L.elem[j]=L.elem[j-1];//元素后移

L.elem[i-1]=e;//插入e

L.length=L.length+1;//表长加1

}

//建立递增有序的顺序表

void CreateList_Sorted(SqList &L)

{int i,num;

ElemType e;

L.length=0;

printf("Create a sorted list,Input the length of the list\n");

scanf("%d",&num);

printf("Input the data %d numbers\n",num);

for(i=1;i<=num;i++){

scanf("%d",&e);

Insert(L,e);

}

}

/*Merge two sorted lists*/

void MergeList(SqList La,SqList Lb,SqList &Lc)

{int *pa,*pb,*pc;

if (La.length+Lb.length>MAXSIZE) exit(OVERFLOW);

else

{pa=La.elem;pb=Lb.elem;pc=Lc.elem;

while (pa
<la.elem+la.length&&pb<lb.elem+lb.length)
*pc++=(*pa<=*pb)?*pa++:*pb++;/*公共部分合并*/

while (pa
<la.elem+la.length) *pc++="*pa++;
/*R1表的剩余部分放到R的后部*/

while (pb
<lb.elem+lb.length) *pc++="*pb++;
/*R2表的剩余部分放到R的后部*/

Lc.length=La.length+Lb.length;/*R表长*/

}

}

//判断元素是否对称,对称返回TRUE 否则返回FALSE

Status Symmetric(SqList L)

{int low,high;

low=0;

high=L.length-1;

while(low
<high)
if (L.elem[low]==L.elem[high]){low++;high--;}

else return(FALSE); return(TRUE); }

//顺序表的主函数部分

//#include "seqlist.h"

void main()

{SqList L1,L2,L;

int select;

ElemType e;

do{printf("\n1 insert 2 merge");

printf("\n3 symmetric 0 exit \n");

printf("Please select(0--3)\n");

scanf("%d",&select);

switch(select){

case 1:

InitList(L);

CreateList_Sorted(L);

Traverse(L,printdata);

printf("\nInput the element of inserted\n");

scanf("%d",&e);

Insert(L,e);

Traverse(L,printdata);

break;

case 2:

InitList(L1);

CreateList_Sorted(L1);

Traverse(L1,printdata);

InitList(L2);

CreateList_Sorted(L2);

Traverse(L2,printdata);

InitList(L);

MergeList(L1,L2,L);

Traverse(L,printdata);

break;

case 3:

InitList(L);

CreateList(L);

Traverse(L,printdata);

if (Symmetric(L)) printf("Yes!\n"); else printf("Not\n");

break;

case 0:break;

default:printf("Error! Try again!\n");

}

}while(select);

}

/*单向链表的有关操作示例*/

/*类型定义及头文件部分,文件名为sllink.h*/

#include

阅读更多 >>>  二叉树的深度,二叉树的深度怎么算

#include

typedef int ElemType;//元素实际类型

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //定义结点、指针类型名

//头插法建立无序链表

void CreateList(LinkList &L){

LinkList p;

ElemType e;

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

L->next=NULL;

printf("头插法建立链表,以0结束\n");

scanf("%d",&e);

while(e){

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

p->data=e;

p->next=L->next;

L->next=p;

scanf("%d",&e);

}

}

/*非递减有序单向链表L插入元素e序列仍有序*/

void Insert_Sort(LinkList &L,ElemType e){

LinkList p,s;

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

s->data=e;

p=L;

while(p->next&&p->next->data<=e)

p=p->next;/*查找插入位置*/

s->next=p->next; /*插入语句*p结点后插入*s结点*/

p->next=s;

}

/*建立递增有序的单向链表*/

void Create_Sort(LinkList &L){

ElemType e;

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

L->next=NULL;

printf("建立有序表,输入任意个整型数据以0结束\n");

scanf("%d",&e);

while(e){

Insert_Sort(L,e);

scanf("%d",&e);

}

}

/*单向链表的遍历*/

void Traverse(LinkList L){

LinkList p;

printf("遍历链表");

for(p=L->next;p;p=p->next)

printf("%5d",p->data);

printf("\n");

}

/*在单向链表删除元素e*/

void Delete(LinkList &L,ElemType e){

LinkList p,q;

p=L;

q=L->next;

while(q&& q->data!=e){//查找元素的删除位置

p=q;

q=q->next;

}

if(!q) printf("\nnot deleted");/*未找到元素e*/

else {p->next=q->next;/*找到删除*/

free(q);}

}

/*单向链表的逆置*/

void exch(LinkList &L){

LinkList p,s;

p=L->next;

L->next=NULL;

while(p){

s=p;

p=p->next;

s->next=L->next;

L->next=s;

}

}

/*两个非递减有序单向链表合并后仍为非递减序列*/

void MergeIncrease(LinkList La,LinkList Lb,LinkList &Lc){

LinkList p,q,s,rear;

p=La->next;

q=Lb->next;

Lc=rear=La;

free(Lb);

while(p&&q){

if (p->data

data) {s=p;p=p->next; }

else {s=q;q=q->next; }

rear->next=s;/*较小元素插入表尾*/

rear=rear->next;

}

if (p) rear->next=p; else rear->next=q;

}

/*主函数部分,文件名为sllink.c*/

//#include "sllink.h"

void main(){

LinkList La,Lb,Lc;

ElemType e;

int select;

do{

printf(" 1 建立无序表,再删除指定元素\n");

printf(" 2 建立递增有序表,再逆置\n");

printf(" 3 建立两个递增有序表,将它们和并为一个仍递增表\n");

printf(" 0 退出,请输入选项(0-3)\n");

scanf("%d",&select);

switch(select){

case 0:

break;

case 1:

CreateList(La);

Traverse(La);

printf("输入需删除的元素\n");

scanf("%d",&e);

Delete(La,e);

Traverse(La);

break;

case 2:

Create_Sort(La);

Traverse(La);

exch(La);

printf("The list that is exchaged\n");

Traverse(La);

break;

case 3:

Create_Sort(La);Traverse(La);

Create_Sort(Lb);Traverse(Lb);

MergeIncrease(La,Lb,Lc);Traverse(Lc);

break;

default:

printf("输入选项错误,请重新输入!\n");

}

}while(select);

}

这些内容不知道能不能帮助到你。

</high)

</la.elem+la.length&&pb<lb.elem+lb.length)
</sq.length;i++)
</sq.length;j++)
</sq.length&&sq.elem[i]!=x)
</n;i++)

网站数据信息

"链表c语言经典例题,求写C语言 创建链表实例子。要最基本的 包括注释。"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:链表c语言经典例题,求写C语言 创建链表实例子。要最基本的 包括注释。的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!